逆向工程核心原理笔记
1、大端序和小端序
大端序:高地址存地位,低地址存高位 , 代表Unix RISC CPU
小端序:低地址存低位,高地址存高位,代表 Intel x86 CPU
2、IA32 寄存器
- 通用寄存器 EAX EBX ECX EDX ESP EBP ESI EDI
- 段寄存器 CS DS SS ES FS GS
- 程序状态与控制寄存器 EFLAGS 初级阶段 ZF OF CF
- 指令指针寄存器 EIP
3、栈
栈是一个高地址向低地址增长的数据结构。
栈帧用EBP定位栈内元素,典型栈帧代码
push ebp
mov ebp,esp
....
mov esp,ebp
pop ebp
retn
修改OD栈的相关设置,可比较直观的看到当前元素相对于(栈底)EBP的位置


涉及到函数调用约定:Cdecl Stdcall fastcall
c 语言 (x86)
cdecl: 参数从右向左,调用者清理堆栈
stdcall:参数从右向左,子程序清理
fastcall: 参数ecx edx (R8 R9(x64)) ,剩下的参数从右向左,子程序清理
C++ 类
x86
thiscall: 参数从右向左,参数确定,this 通过ecx 传递,子程序清理,
参数不定,this在所有参数入栈后压栈,调用者清理
x64
参数确定 参数1、参数2、参数3分别保存在RDX、R8D、R9D中,this指针存放RCX中,参数从右往左,子程序清理
class A {
public:
int function1(int a, int b);
int function2(int a, ...);
}
int A::function1(int a, int b) {
return a + b;
}
int A::function2(int a, ...) {
va_list ap;
va_start(ap, a);
int i;
int result = 0;
for (i=

2330

被折叠的 条评论
为什么被折叠?



