我正在尝试理解一些汇编代码,以便我可以在 C 语言中使用它。 假设以下 NASM 代码
get_entry_point:
%define STACK_LIMIT 8
%define return_val [ebp-4]
%define base_ptr [ebp-8]
ebp
寄存器只是访问函数的参数并将它们存储在base_ptr
和return_val
中,还是在做其他事情?
void __stdcall get_entry_point(unsigned long return_val, unsigned long base_ptr);
关于以下代码
push ebp
mov ebp, esp
sub esp, STACK_LIMIT
pushad
在上面的原型 C 函数中会是什么样子?
是 ebp 指令
EBP不是一个指令,它是一个寄存器。它是变量的程序集等效项。
%define return_val [ebp-4]
也不是指令。它只是意味着,无论代码在哪里说return_val
,汇编程序都会将其视为您编写[ebp-4]
。
关于以下代码...在上面的原型 C 函数中会是什么样子?
这是编译器在需要时添加到每个函数开头的标准代码。
它看起来像函数开头的{
,因为它会自动插入函数的开头。