首页 > 解决方案 > 从 C shellcode 访问 EBP 寄存器

问题描述

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

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

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

标签: cassemblynasm

解决方案


是ebp指令

ebp 不是指令,它是一个寄存器。它是一个变量的程序集等价物。

%define return_val [ebp-4]也不是指令。这只是意味着,无论代码在哪里return_val,汇编程序都会将其视为您编写[ebp-4]的。

关于下面的代码......在上面的原型 C 函数中会是什么样子?

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

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


推荐阅读