简单情况:
1)观察调用处的代码
PUSH 3
PUSH 2
PUSH 1
CALL 0040100F
2)找到平衡堆栈的代码继续论证:
CALLL 0040100F
ADD ESP, 0CH
或者函数内部:
RET 4/8/0xC/0x10
3)最后,两者一综合,函数参数个数基本确定。
复杂情况观察步骤:
1. 不考虑EBP、ESP。
2. 只找给别人赋值的寄存器:EAX 、ECX、 EDX、EBX、ESI、EDI。
3.找到之后追查其来源。如果,如果该寄存器的值不是在函数内被赋值的,那一定是传进来的参数。
公式一: 寄存器 + ret 4 = 参数个数
公式二: 寄存器 + [EBP + 8]、[EBP + 0x] = 参数个数