自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 Real-Time Rendering读书笔记 第四章: Transforms 变换 (未完成)

第四章 Transforms 变换​ 变换是一种操作,它接受点,向量或颜色等实体,并以某种方式对其进行转换。 对于计算机图形从业者来说,掌握转换极为重要。 有了它们,您就可以定位,重塑形状和设置对象,灯光和照相机的动画。 您还可以确保所有计算都在同一坐标系中进行,并以不同方式将对象投影到平面上。 这些只是可以通过转换执行的操作中的少数操作,但是它们足以说明转换角色在实时图形或任何形式的计算机图形中的重要性。​ 线性变换是保留矢量加法和标量乘法的变换。f(x) + f(y) = f(x

2020-08-16 17:49:24 842 3

原创 VMM实践:当虚拟化遇到虚拟机

文章目录1. 复现蓝屏:2. 哪里触发了double fault:3 .如何兼容:4 要注意的问题。N年前些的老文,转到优快云博客2014年开始,组内做了个基于VT虚拟化的游戏安全模块,当时购买了bluepill的代码的使用权,在它基础上做二次开发,bluepill因为只是个实验产品,所以只开发了最简单的功能,很多扩展功能都没有做,其中就包括和VMware,VirtualBox之类虚拟机的兼...

2020-02-24 15:41:11 2662 4

原创 llvm实践1:虚表内存修改

这里是引用LLVM虚表遍历文章目录LLVM虚表遍历1.1 C++虚表在ll里的写法1.2 虚表在clang里的生成1.3 遍历虚表GlobalVariable上周收到一个任务,需要通过编写llvm pass,修改C++虚表的内容,之前没看过llvm的源码,学习了一下1.1 C++虚表在ll里的写法先定义了两个类A,B,B继承于A,两个类都各有2个虚函数print 和print2cl...

2020-02-22 23:11:06 1035 1

原创 Virtualbox源码分析23 NEM(Hyper-V兼容)4 VMExit

Native execution manager (VMExit)文章目录Native execution manager (VMExit)23.1 EPT内存管理23.1.1分配内存23.1.2 Unmap内存23.1.3 修改内存属性和页面Map关系23.2 VMExit处理nemHCWinStopCpunemHCWinHandleMessagenemHCWinCopyStateFromX6...

2020-02-13 21:50:39 1219

原创 Virtualbox源码分析22 NEM(Hyper-V兼容)3 Emulation Thread

Native execution manager (Emulation Thread )文章目录Native execution manager (Emulation Thread )22.1. Emulation循环线程emR3NemExecutenemR3NativeRunGCR0的循环NEMR0RunGuestCodeemR3NemForcedActions22.2 从GuestOS里获...

2020-02-13 21:33:52 752

原创 Virtualbox源码分析21 NEM(Hyper-V兼容)2 Hyper-V初始化和VM创建销毁

Virtualbox源代码Native execution manager (Hyper-V兼容)

2020-02-09 22:26:16 3446 1

原创 Virtualbox源码分析20 NEM(Hyper-V兼容)1 Hyper-V架构和API介绍

Native execution manager (Hyper-V兼容)Windows April 2018 Update之后引入了一个新的运行模式:Hyper-V 模式, 当Hyper-V模式开启之后,windows会占用VT(抢占式),其他软件不能在操作系统上在开启VT功能,同时提供了一系列Hypervisor Platform APIs,其他软件可以调用这些API创建VMX Guest,后...

2020-02-09 16:42:34 2693

原创 Virtualbox源码分析19 Trap Monitor

TRPM - The Trap Monitor (陷阱监视器)负责管理和向虚拟机内发送中断。19.1 初始化API等TRPMCPU每个VCPU都一个的结构体TRPMCPU,保存了发送给当前VCPU的中断信息,当TRPMCPU里有active的中断信息的时候,进入GuestOS之前需要发送这个中断信息到GuestOS里typedef struct TRPMCPU{ //中断LVT ...

2020-02-08 09:23:24 555

原创 Virtualbox源码分析18 APIC虚拟化3 中断发送

18.1 利用APIC发送硬件中断到VCPU中中断处理一般分成3个阶段:发送中断(保存中断信息到APIC里),获取中断(从APIC里获取一个最高优先级的中断),处理中断(设置VMCS里异常相关内容)。下面分别看看这3个类型的函数Virtualbox在其他Manager发松中断到APIC的时候,会吧中断向量先保存到APICCPU变量里的PIB内存里,APICUpdatePendingInterr...

2020-02-07 15:50:00 908 1

原创 Virtualbox源码分析17 APIC虚拟化2.APIC设备模拟

17.1 APIC设备模拟VirtualBox里,把APIC作为一个R0的PNP设备来模拟:const PDMDEVREG g_DeviceAPIC ={ /* .u32Version = */ PDM_DEVREG_VERSION, /* .uReserved0 = */ 0, /* .szName = */ ...

2020-02-06 19:45:51 1116

原创 Virtualbox源码分析16 APIC虚拟化1 APIC概念和初始化

说明: APIC我其实也理解的不是特别明白,只是从网上找些资料和阅读源码理解,如果有错误,麻烦在下面评论里指出。虚拟化有个重要的功能: APIC虚拟化,本章重点介绍这个功能中断是什么一般来说,中断主要是由一些硬件设备产生的,表示这些硬件有一些重要的事件需要通知处理器,比如某些从外部设备请求的数据准备好了,需要通知处理器对其进行读取等。当然这里所谓的“一般来说”是指也可以通过软件的方式来触发中...

2020-02-06 14:44:10 2283

原创 Virtualbox源码分析15 IEM: Instruction Decoding and Emulation manager

IEM - Instruction Decoding and Emulation managerIEM : 模拟执行管理模块负责模拟执行小段连续guest代码避免太多退出/虚拟化陷阱导致性能下降,同时也提供单条指令的模拟。15.1 模拟执行单条指令IEM定义了很多指令的模拟执行代码g_apfnOneByteMap(IEMAllInstructionsOneByte.cpp.h) :opco...

2020-02-03 17:40:36 1210

原创 Virtualbox源码分析14 Emulation manager2

EM - Execution Monitor / Manager15.1 用模拟执行多条指令解决过频繁VMExit因为发生一次VMExit,CPU需要切换上下文消耗大量性能,为了提升性能,当CPU执行部分执行指令的时候,EM会检查发生VMExit的这个RIP是否曾经发生过VMExit,如果曾经发生过多次VMExit事件,则会从这条指令开始模拟执行最多cMaxInstructions条指令。可...

2020-02-01 17:38:49 955 1

原创 Virtualbox源码分析13 Emulation manager1

EM : Execution Monitor / Manager 负责运行VM、调度正确的执行类型((Raw-mode, Hardware Assisted, Recompiled orInterpreted),并保持CPU状态同步。EMR3ExecuteVM函数是虚拟机的“主循环”,而每个执行模式具有不同的内部循环(emR3RawExecute、emR3HmExecute和emR3RemEx...

2020-01-31 17:04:11 1425 1

原创 Virtualbox源码分析11 CPU manager3:CPUID

这一章里,介绍模拟CPUID和CPU寄存器访问11.1 GuestOS CpuId/MSR初始化cpumR3InitCpuIdAndMsrs在CpumInit()函数里调用int cpumR3InitCpuIdAndMsrs(PVM pVM, PCCPUMMSRS pHostMsrs){ // 读取配置 CPUMCPUIDCONFIG Config; cpumR3CpuIdR...

2020-01-29 20:19:28 2238

原创 Virtualbox源码分析12 CPU manager4:MSR

上一章里介绍了CPUID的初始化和读取,这一章里,介绍模拟MSR寄存器的初始化和读写操作12.1 MSR Ranges 初始化g_apCpumDbEntries里定义了VMMR3\cpus目录下所有已知的CPU列表,这些.h文件里定义了每个CPU的所有MSR寄存器列表static CPUMDBENTRY const * const g_apCpumDbEntries[] ={ &...

2020-01-28 22:46:35 855 1

原创 Virtualbox源码分析10 CPU manager2:APIs

Virtualbox源码分析10 CPU manager2:APIs10.1 R3Init相关APIs(CPUM.cpp)CPUMR3Init 初始化CPUMVMMR3DECL(int) CPUMR3Init(PVM pVM){ //根据host CPU信息设置一些flag //获取host CPUID失败,直接返回 if (!ASMHasCpuId()) ...

2020-01-27 20:48:27 1076

原创 Virtualbox源码分析9 CPU manager1

Virtualbox源码分析9 CPU manager1接下来3篇文章,介绍CPU虚拟化管理部分: CPUM每个VM 都有一个或者多个VCPU,VCPU是VM运行的单位,类似于操作系统中的进程和线程的概念,VM是进程,VCPU是线程,一个host里可以有多个VM。每个VCPU都需要全局变量保存相关信息,比如VCPU进入/退出 GuestOS都需要保存相关上下文信息。第一篇介绍一些重要的结构体...

2020-01-26 16:22:56 1441

原创 Virtualbox源码分析8: VM manager

·Virtualbox源码分析8: VM managerVMM的代码里,处理VT-X虚拟化框架之外,还有各种Manager,从vmR3InitRing3()这个函数里,可以看到所有manager的初始化函数/** * Initializes all R3 components of the VM */static int vmR3InitRing3(PVM pVM, PUVM pUVM)...

2020-01-21 19:18:24 2045 2

原创 Virtualbox源码分析6_VMM虚拟化实现源码分析3 HMVMXR0.cpp

Virtualbox源码分析6:VMM虚拟化实现源码分析3 HMVMXR0.cpp前面两章介绍了VT-X的原理和主要函数,这章里继续介绍其他VT-X的其他函数,通过这一章的讲解,可以完整的了解写一个基于VT-X的虚拟化软件的大部分关键内容6.1 Host和Guest的线程切换进入GuestOS之前的PreRun代码,会顺序调用hmR0VmxPreRunGuest和hmR0VmxPreRunG...

2020-01-20 16:00:09 1630 1

原创 Virtualbox源码分析7: Hardware Assisted Virtualization Manager (HM)源码分析

Virtualbox源码分析6: Hardware Assisted Virtualization Manager (HM)源码分析有了前两章介绍的VT-x基础框架后,就可以调用这些API实现一个VMMHM代码分成两个部分 R3/R0, 代码分别位于VMM\VMMR0\HMR0.cpp VMM\VMMR0\VMMR0.cpp VMM\VMMR3\HM.cpp里代码分别编译到VMM.dll 和...

2020-01-15 22:37:09 1465 1

原创 Virtualbox源码分析5:VMX虚拟化实现源码分析2

Virtualbox源码分析5:VMM虚拟化实现源码分析24.2 VMM初始化R0 VMM初始化入口在HMR0.cpp里的HMR0Init()VMMR0_INT_DECL(int) HMR0Init(void){ uint32_t fCaps = 0; int rc = SUPR0GetVTSupport(&fCaps); if (RT_SUCCESS(rc))...

2020-01-13 22:10:47 1981 1

原创 Virtualbox源码分析4:VMM虚拟化实现源码分析1

Virtualbox源码分析4:内存虚拟化代码分析

2020-01-13 20:59:35 4429 2

原创 Virtualbox源码分析3:VMM内存虚拟化概述

VMM虚拟化一: 基于VT的虚拟化框架一: 什么是VTVT,就是虚拟化技术(Virtualization Technology)的缩写。Intel VT就是指Intel的虚拟化技术。这种技术简单来说就是让可以让一个CPU工作起来就像多个CPU并行运行,从而使得在一台电脑内可以同时运行多个操作系统。只有部份Intel 的CPU才支持这种技术。AMD平台对应的是SVM基于VT框架,可以实现 内...

2020-01-11 17:22:38 2878 3

原创 virtualbox源码分析 2:代码目录解析

2. 源码目录我已2020年1月9日从官网上下载的最新的VirtualBox源码6.1.0为例子:根目录里有一些文件夹和config/makefile文件,其中主要关注include/src文件src/VBox 目录里, 是实现的核心代码,本系列文章主要也是围绕个目录:2.1 Additions:**2.2 Devices:**2.3 Frontends:**2.4 Gue...

2020-01-10 13:48:05 4155

原创 virtualbox源码分析 1:安装目录解析

一 安装目录文件说明:Virtualbox安装完成之后,会在C:\Program Files\Oracle\VirtualBox目录下释放所有需要的文件:文件看起来很多,但有部分是第三方,addon,UI和工具其中比较重要的文件主要有一下几个:exe:Virtualbox.exe : UIjiem...

2020-01-09 13:33:09 4553 2

原创 第一篇blog

打算写关于虚拟机实现(基于virtualbox源码)的一系列文章

2020-01-07 12:07:23 1204 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除