我不懂汇编,所以我不确定该怎么做。
我有一个程序正在挂接到另一个程序。我已经获得函数在 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/