思路:先转换成反汇编语言代码,在根据反汇编语言代码转换成C语言
1.打开ollydbg:
打开CallingConvention.exe
2.在CPU窗口找到程序的main入口:
先找到GetCommandLineA()函数后,再往后找,直到发现一个call指令前有压入了三个参数(push指令),并且在这个call指令后的add esp指令中的后面操作数为0xc,那么这个call指令调用了main函数:
找到后回车call指令,再回车,就跳转到了main函数:
main函数的保留栈底、提升堆栈、保留现场、填充堆栈如下:
然后main函数调用了第一个函数A,可以观察到这个函数一共有五个参数,分别是1,3,4,6,7;并且前两个是使用寄存器存储的,推断出使用的是“__fastcall调用约定”:
选择call命令代码回车,再回车,跳转到第一个函数:
3.接下来分析第一个函数A:
前面几行有保留栈底、提升堆栈、保留现场、填充堆栈,还有保留ecx的工作: