- 下图列出了
int Add(int,int);
的逆向结果和源代码: - 基础知识:
- lea 指令将操作数的地址复制给寄存器。
- eax寄存器用于保存返回值。
- __fastcall调用约定的作用是,参数中,从左到右的前四个字节的参数会被放到寄存器中(正常的参数都是放入栈中的),来加快函数调用。
- rcx和rdx是64位的寄存器,对应ecx和edx。
- rcx和rdx和__fastcall有关系,代表第一个和第二个参数。
- 疑问?retn 会将esp的值加4(相当于一个出栈操作),这个出栈的数据是啥?