从 C 外壳代码访问 EBP 寄存器



我正在尝试理解一些汇编代码,以便我可以在 C 语言中使用它。 假设以下 NASM 代码

get_entry_point:
%define STACK_LIMIT 8
%define return_val [ebp-4]
%define base_ptr [ebp-8]

ebp寄存器只是访问函数的参数并将它们存储在base_ptrreturn_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 函数中会是什么样子?

这是编译器在需要时添加到每个函数开头的标准代码。

它看起来像函数开头的{,因为它会自动插入函数的开头。

最新更新