首页
社区
课程
招聘
Windows内核-X64(九)
发表于: 2022-8-24 02:02 8467

Windows内核-X64(九)

2022-8-24 02:02
8467

1.寄存器


2.线性地址

intel规定48位都是有效的,但微软只用了44位

0~47:48位是线性地址

48~63:16位是符号位。这16个位要么全是1要么全是0,否则为非法


3.全局变量地址

实例

000000013F6017E5 + a81b = 013F60C000h

4.vs写64位汇编

1.h

1.asm

参数1保存在rcx

参数2保存在rdx

返回值保存在rax

main.cpp

在项目右键-->生产依赖项-->生成自定义


在1.asm右键属性-->项类型


1.在汇编里面调用c代码

main.cpp

1.h

1.asm

2.函数参数

函数有四个参数:rcx, rdx, r8, r9

函数有六个参数:rcx, rdx, r8, r9,RSP+20H, RSP+28H

1.开启64位模式


2.x64体系

IA-32E:64位模式,并且兼容32位和16位,目前64位用的就是IA-32E模式

IA-64:只能是64位模式,不兼容32位和16位,这种模式被抛弃



3.段

32保护模式下,只有8字节.

64位下代码段与数据段是8字节,系统段是16字节




1.gate.asm

2.x64调用门.cpp

3.修改描述符

1.win7x64分页

PTE基址:FFFFF68000000000 (固定的)

&的数:0x7FFFFFFFF8 (固定的)

2.线性地址

fffff800`03ea3400

3.算法

先求出pte,然后用pte依次求出其它

4.win10的pte基址是动态的

每次开机都会变化,所以要用函数获得

1.Memory.h

2.Memory.c

3.DriverMain.c

X64与X32的区别

KeServiceDescriptorTable不再是导出的,需要通过函数特征去搜索

函数地址仍然是32位的,但是里面存的不再是函数地址,而是一个偏移值


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-8-24 02:09 被zhang_derek编辑 ,原因:
收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
跟着大佬学习
2022-8-24 18:56
0
雪    币: 164
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我猜会出VT教程
2022-8-25 09:14
0
游客
登录 | 注册 方可回帖
返回
//