X64程序逆向分析
x64指令集
x64位程序使用的是x64指令集,64指令集有AMD64,EM64T,IA-64三种。
AMD64是最早推出,intel和惠普联合推出了IA-64但是没有用户起来
Intel直接拷贝AMD的指令集推出了IA-32E后改名为EM64T,也就是intel6。统称为x64指令集
x64和x86的区别
x86中原有的寄存器在64中拓展为64位,且名称的第一个字母E改为R,但是依然可以用低位寄存器,如RAX,EAX,AX,AL
EIP变成了RIP EFLAG变成RFLAG
x64多了8个64位通用寄存器R8-R15。每个寄存器都可以拆分为32,16,8位
x64程序变化
32位位程序中的函数调用约定被废除了
x64应用程序只有一种调用约定,类似于fastcall。
前四个参数使用寄存器传递,如果超过四个多余的参数就放在栈里,入栈顺序是从右到左,由函数调用方来平衡堆栈,前四个参数存放的寄存器是固定的,分别是从左到右的参数分别是RCX,RDX,R8,R9,其他参数从右往左依次入栈
64位程序中当在开辟栈空间的时候,直接调用rsp来处理,而没有调用esp,然后再返回栈空间的时候,直接调用的是对栈顶进行偏移
分析x64程序
首先找到main函数
对于x64程序找main函数和x86程序是一样的流程