我想知道如何使用内联汇编检索调用我的函数的函数的地址。我的想法是获取调用 mine 的函数将返回的地址,并使用它之前的指令(即调用 mine 的函数)检索调用 mine 的函数的地址,并将其添加到给定的偏移量调用,到下一条指令的地址(调用我的函数将返回的地址)。到目前为止,我能够做到这一点,但要得到我的地址。它相当简单并且有效:
_asm
{
mov eax, [ebp+4]
mov returnTo,eax
}
long addressOfMine = (*((long*)(returnTo - sizeof(long)))) + returnTo)
这可以很好地检索我的地址。(通过知道 [ebp+4] 是我的返回地址)
为了做同样的事情,但在上面一步,我试图获取旧的 ebp 并做同样的事情。我在一个站点上看到 [ebp+0] 是旧的 ebp,所以我尝试了:
_asm
{
mov eax, [ebp]
mov ebx, [eax+4]
mov returnTo,ebx
}
long addressOfCaller = (*((long*)(returnTo - sizeof(long)))) + returnTo)
但它不起作用。所以,我的假设是错误的,或者我做错了什么,所以我想请你帮忙。