【发布时间】:2014-07-29 10:03:43
【问题描述】:
寄存器EBP 中有一个int 值,EBX 中有一个字符串。我需要在我自己的函数中从这些寄存器中获取值,对它们进行一些操作,最后跳回下面的一些代码。
我在0x46AA17 对我的函数JmpHook 执行JMP。
void JmpHook()
{
char *mystring;
_asm mov mystring, ebx
printf("value: %s", mystring);
_asm
{
jmp [0x46AA87]
}
}
如您所见,我正在尝试将EBX 处的字符串移动到mystring 并在最后跳回0x46AA87,它位于我的JMP JmpHook 下方的几行。
printf 被调用并且 mystring 被输出,但是这一切在 OllyDbg 中看起来非常不整洁。我也无法获得EBP,因为它在JmpHook 的开头被覆盖(在OllyDbg 中看到了)。 JMP 末尾的 JmpHook 也不起作用:
所以我的问题是如何正确跳转到我自己的函数,将两个寄存器保存在变量中,然后在一些操作后跳转回原始代码。
谢谢!
【问题讨论】:
-
这是哪个特定的架构/环境??
-
Windows 上的 32 位程序集。你为什么投反对票?
-
'你为什么投了反对票?'因为你错过了澄清问题中的一些要点。
-
啊,这有帮助,谢谢。如果什么都不指定,那显然是x86 asm...
-
'这显然是 x86 asm' 不!
标签: c++ windows x86 hook inline-assembly