c++ - ASM 对 C++ 的调用
问题描述
我正在尝试学习一些逆向工程,但我陷入了困境。
我有这个asm代码:
mov ecx,[0x00E81DAC]
push [ebp-04]
add ecx,04
mov eax,[ecx]
call dword ptr [eax+08]
据我了解,它将地址0x00E81DAC的结果设置为ecx
然后它传递一个参数ebp - 0x4 (在我的例子中ebp是一个整数参数,可以说27590)
然后它添加到ecx +4(所以0x00E81DAC + 0x4的结果?)
然后它得到 ecx 的结果并将其设置为 eax
然后它调用eax +0x8
这是我想出来的,但它错了
DWORD* (__thiscall* callFunc) (int) = (DWORD* (__thiscall*)(int argument))((0x00E81DAC + 0x4) - 0x8);
DWORD* retValue = callFunc(27590);
该函数应返回一个 DWORD*
调用这个的正确方法是什么?
解决方案
推荐阅读
- java - 如果未通过身份验证,则设置 Spring 安全性以将用户重定向到登录页面
- ruby-on-rails - Rails 显示来自 has_and_belongs_to_many 关系的属性
- java-native-interface - cmd 提示符中的 JNI 标头
- python - 是否可以同时使用 Flask 微框架和循环运行 Web 服务器?
- php - Bootstrap 4 Carousel 使用 WP Posts 堆叠而不是滑动
- angular - Angular 发布请求中缺少 _xsrf 参数
- python - 输入python的反向传播
- knitr - knitr include_graphics 中的 Bookdown 标题
- xpages - 如何在新选项卡的富文本字段中打开链接
- odoo - 从odoo 8迁移到10