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
Представьте себе стек. ESP - это смещение самого верхнего элемента в стеке. [esp + 14] ссылается на значение, которое сохраняется на 7 словах ниже ESP. –
См. [Что такое указатель базы и указатель стека? На что они указывают?] (Http://stackoverflow.com/questions/1395591/), в частности [этот ответ] (http://stackoverflow.com/a/1395646/902497), в котором обсуждается упущение указателя кадра (FPO) , –