c++ - 使用 __asm 从十六进制偏移调用函数

标签 c++ c assembly inline-assembly

我不懂汇编,所以我不确定该怎么做。

我有一个程序正在挂接到另一个程序。我已经获得函数在 Hook 程序的 .exe 中所在位置的偏移量

#define FuncToCall 0x00447E5D

那么现在如何使用 __asm{} 调用该函数?

最佳答案

简短的回答是,如果你不懂汇编,你不应该这样做,哈哈。

但是,如果您如此热衷于进行墙面黑客攻击,我的意思是,修改合法程序的操作,您不能只获取一个地址并称其为好。

您需要查找符号(如果在快乐的 linux 领域)或使用 sig 扫描(或同时使用 D=)来查找实际函数。

一旦你这样做了,它就相对简单了,你只需要写一个mov和jmp。假设您已经可以访问正在运行的进程,并且您的 sig 扫描器找到了正确的地址,这段代码将得到您想要的

mov eax, 0×deadbeef
jmp eax

现在,如果你想要的这个功能是一个类方法..你需要做更多的研究。但是那部分程序集将运行您想要的任何静态函数。

处理不同的调用约定也有些困惑,所以没有评论者试图就此叫我出来,这对于这个问题来说还远远不够先进。

编辑: 顺便说一句,我不使用调用,因为使用调用时你必须担心堆栈帧和其他非常困惑的事情。此代码将跳转到任何地址并开始执行。

如果你想返回到你的代码那是另一回事,但只要它是正确的调用约定,而不是类方法等等,这将使你的目标函数运行

关于c++ - 使用 __asm 从十六进制偏移调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1926007/

相关文章:

c++ - 如何使用 ULARGE_INTEGER 进行算术运算

c - 为什么这段C代码的输出如此

C中的计算包含

assembly - MIX 中的除法是如何进行的?

encryption - 如何加密程序以防止反汇编?

c++ - 在 GDB 中打印子类成员

c++ - Boost tribool 在 C++ 中导致从右到左的条件评估

c++ - AVL 树的不同节点中的键值可以相同吗?

python - 将二进制数据从 Python 传递到 C API 扩展

gcc - shrl 与 sarl .. x86 汇编 gnu