В настоящее время я анализирую программу, которую я написал в сборке, и думал о перемещении некоторого кода в сборке. У меня есть процедура, которая принимает один аргумент, но я не уверен, передан ли он в стек или регистр.Будут переданы аргументы функции в стек или в регистр?
Когда я открываю программу в IDA Pro, первая строка в процедуре является:
ThreadID= dword ptr -4
Если я парить мой курсор над декларацией, следующее также появляется:
ThreadID dd ?
r db 4 dup(?)
который Я бы предположил, что это указывает на переменную стека?
Однако, когда я открываю ту же программу в OllyDbg, в этом месте на стеке есть большое значение, которое было бы несовместимо с любым параметром, который мог быть передан, что заставило меня поверить, что оно передается в регистр ,
Может ли кто-нибудь указать мне правильное направление?
Вызывающий конвенция __fastcall – samoz
«Как правило азЬсаИ соглашения о вызовах передать один или более аргументов в регистрах, что уменьшает количество обращений к памяти требуется для вызова.» - http://en.wikipedia.org/wiki/X86_calling_conventions#fastcall –
Еще одна вещь, которую я не заметил. Положительные смещения в стеке (относительно базового указателя) являются локальными переменными, поэтому ThreadID скорее всего является локальной переменной. –