x64体系探索笔记

64位汇编寄存器
64位汇编中寄存器除了段寄存器外,其余的都是64位,即8字节,所以栈结构的入栈和出栈字节数都要求模8。相比32位汇编,64位汇编的通用寄存器在数量上多了8个,共有16个通用寄存器,其中八个是兼容32位汇编的,分别是将原来的名称e改成了r,如eax改成rax,其余8个分别命名为R8、R9、……R15,EIP和EFlags都改成RIP和RFlags,高32位都是0.,浮点寄存器还是64位,于32位汇编中一样,分别称为MMX0(或记为FPR0)、……、MMX7(或记为FPR7)。另外,还增加了16个128位的多媒体寄存器——XMM0、……XMM15,俗称SSE指令,XMM0等多媒体指令又是256位寄存器YMM0等的低128位,这些多媒体寄存器的出现可以是得float型数据计算非常快,一次算四个,相当于原来的两倍,广泛应用于游戏、视频和音乐中。用于调试64位程序的调试器有WndDbg和X64Dbg。rax等初始8个通用寄存器,取其中的低32位、第16位、第8位分别用相应的寄存器取便是,如rax分别是eax、ax、al,R8等后来按序号命名的寄存器取64位、低32位、低16位、低8位分别用R8、R8D、R8W、R8B等。在这里插入图片描述

x64虚拟地址
0000 1234 2345 6789 前16位地址(符号扩展位)没有用到,并且前16位要么全为0(正数)要么全为1(负数) 后面48位地址才是有效的 如果前16位不是0000或者ffff那么该地址是无效的

x64寻址方式
和32位寻址没有什么不同只是多了一种寻址方式
在这里插入图片描述

x64调用约定
只有一种fastcall调用约定,前四个整型或指针类型参数由RCX,RDX,R8,R9依次传递,前四个浮点类型参数由XMM0,XMM1,XMM2,XMM3依次传递。
也就是寄存器传参,除前四个参数以外的任何其他参数通过栈来传递,从右至左依次入栈,
且没用push传参,直接Mov移动到栈里面,当调用函数后,[RSP]存的就是返回地址,函数内并没有向32位那样会开辟栈,(mov esp,ebp,sub esp),函数头部如下图所示,当函数内寄存器并不能够替代足够多的局部变量或者其他类型的变量,那么该函数还是会自己开辟栈,比较依赖编译器

在这里插入图片描述

x64段描述符
和32位的段选择大小并没有区别还是8个字节 区别:base被忽略,g位被忽略,参数被忽略,另外值得一提的是64下的调用门中只要产生异常操作系统就卡死,也就是说不能在调用里面下断点
写入调用门
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

x64段选择子
和32位的段选择并没有区别还是 最后13位是gdt下标,开始2位是rpl,中间的一位还是ti,
64位下的gdt表大小只有7f,从80开始就是idtr,可以利用的位置只有70,。

在这里插入图片描述
在这里插入图片描述

x64分页机制
实验出真理 直接拿个地址拆
2-9-9-12在这里插入图片描述
线性地址0000 0000 ^ 0030fdb8
已知前面四个0是符号位,其中后面3个是物理地址偏移也就是db8
要拆的就是0000 ^ 0030f
0000 0000 0 0乘以8
000 0000 00 0乘以8
00 0000 001 1乘以8
1 0000 1111 10f乘以8
32位下的是乘以4

!porcess 0 0找到我们的进程cr3 07b67000
dq 07b67000得到页目录基地址 00700000^140f1867
dq 00000000^140f10000+0乘以8得到pdpte 02e00000^08175867
dq 00000000^08175000+1乘以8得到pde 01400000^0747d867
dq 00000000^0747d000+10f乘以8得到pte 8dc00000^07b22867
dq 00000000^07b22000+db8得到物理地址7b22db8也就是线性地址0000 0000 ^ 0030fdb8

64syscall调用过程
简单描述下
1保存Rflags寄存器到R11中 并且替换rflag
2保存syscall返回地址到RCX
3替换CS和SS
在这里插入图片描述在这里插入图片描述
4进入R0 kifastcall
如何调用函数:还是通过函数id(eax)来调用函数

如何传参数!在这里插入图片描述kiststemservicecopyend的位置减去去的偏移就是参数,最多传18个参数

退出过程 还原寄存器后然后退出 下面是最后退出的汇编
在这里插入图片描述

x64内核结构体
gs为kpcr而不是以前的fs 未完待续

猜你喜欢

转载自blog.csdn.net/qq_43045569/article/details/104805617
今日推荐