驱动开发学习
环境安装
安装Win10虚拟机
直接拷虚拟机即可
所需软件 :
vs、wdk、MSVRC、x64dbg
在安装vs时需要安装SDK及MSVC,
参考文献 Windows驱动开发之入门篇(一).
X64基础(主要应用X64dbg)
64位机的通用寄存器与虚拟地址空间
x64dbg运行示例
和OD类似
优先使用32位扩展(因为对32位寄存器的写操作(包括运算结果),会对相应的64位寄存器的高32位清0或置1)
如 rax= ffff000012345678,
mov eax,1
则rax=0000000000000001
xor eax, eax 与xor rax, rax效果是一样的,但是xor eax, eax比xor rax,rax指令多占了一个字节(48)图中第一个是mov rax,-1机器自动生成的,第二个是 自己改变机器码达到同样的效果,可以明显看到字节较长
注意 : 对eax进行写操作,会将高32位自动清零,但如果是ax,al进行操作则不影响高32位; 在使用立即数时,机器会优先选择指令较短的(在不涉及到高32 位的情况下,即立即数不超过32位)
寻址优先使用相对偏移寻址
各种jmp指令
IDA的错误之CS/DS
IDA反汇编时,计算偏移会使用当前代码段的相对偏移,即CS,但这是错误的,应是相对DS段的偏移
EB 是short jmp 后面加一字节的相对偏移,范围是-128 ~127
EBFE机器码 死循环
E9 后面是四字节的相对偏移,是上下2GB的范围(2GB也不算大,在64位机中也经常不够用)
FF25 01 23 45 67 是跳转到 [ 下条指令地址 + 0x67452301]
FF 24 25 01 02 03 04 跳转到 [04 03 02 01] 但是这个指令有点废