push ebx
push ebp
mov ebp,[esp+14]
push esi
mov esi,[esp+14]
push edi
mov [esp+10],00000000
cmp dword ptr [ebp+00],05
jne aheadInThisFx
mov eax,[esp+20]
mov edi,[ebp+08]
push eax
push edi
push esi
call SomeItherFx
//more code
aheadInThisFx:
上面的代码是反汇编一个函数的开始,这很奇怪。什么样的编译器会产生这样的废话? 如果您已经遇到类似的情况,请向我解释一下。 我不明白调用约定。 在第3行,这意味着什么: mov ebp,[esp+14]
不应该是: push ebp mov ebp,esp
和参数[ebp-4],[ebp-8]? 谢谢奇怪的程序集调用约定
显然它使用'ebp'作为通用寄存器。调用约定不会强制使用帧指针,也不会使用标准堆栈帧。 – Jester 2015-02-08 19:07:51
想象一下堆栈。 ESP是堆栈中最上面的元素的偏移量。 [esp + 14]引用保存在ESP以下7个字的值。 – 2015-02-08 19:10:51
请参见[基本指针和堆栈指针是什么?他们指出什么?](http://stackoverflow.com/questions/1395591/),特别是[这个答案](http://stackoverflow.com/a/1395646/902497)讨论帧指针遗漏(FPO) 。 – 2015-02-08 19:20:10