c - 从 C shellcode 访问 EBP 寄存器
问题描述
我正在尝试理解一些汇编代码,以便我可以在 C 中使用它。假设以下 NASM 代码
get_entry_point:
%define STACK_LIMIT 8
%define return_val [ebp-4]
%define base_ptr [ebp-8]
ebp
寄存器只是简单地访问函数的参数并将它们存储在andbase_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 函数中会是什么样子?
这是编译器在需要时添加到每个函数开头的标准代码。
它看起来像{
函数开头的 ,因为它会自动插入到函数的开头。
推荐阅读
- sql - 将 rank() 与 partition by 和 order by case 一起使用
- javascript - 地图渲染后在 Android 上反应原生地图“LongitudeDelta”错误
- java - 即使主项目有语法错误,也可以在android studio中独立测试简单的java代码
- java - 如何下载 protobuf-socket-rpc maven 存储库?
- jestjs - 找不到 Nestjs 测试模块
- include - Sequelize - 无法绑定多部分标识符
- react-native - 在 react-native 中,我们如何自动检测字符串中的链接和电话号码并在文本中突出显示它们
- python - 我想根据我的演讲刷新我的报告是否可以在 Power BI 中使用?
- java - Java 中的 Nats 请求/回复
- typescript - Apollo、Express、WS 会话未共享