假设我想在C++代码中编写一个内联汇编函数,该函数返回其返回地址。
因此,如果我从某个地址调用函数returnAddress()并且需要在函数完成后返回到地址X,则希望returnAddress()返回值X。
returnAddress()的代码示例:
因此,如果我从某个地址调用函数returnAddress()并且需要在函数完成后返回到地址X,则希望returnAddress()返回值X。
returnAddress()的代码示例:
void* getAddress()
{
__asm {
pop ebx; // moving return offset to ebx?
push ebx; // restoring stack state
xor eax, eax;
mov ax, cs; // ax <- code segment
mov ecx, 16;
mul ecx; // multiplying the code segment by 16
add eax, ebx;// adding offset
}
}
以前的代码不正确,因为当我按alt+8时,我可以清楚地看到我的代码地址与此函数的返回值完全不同。
我想查找内存中代码的地址是因为我想在代码本身正在运行时尝试更改它。如果有其他方法可以找到我的代码地址而不使用内联汇编(也许可以使用Windows API?),请告诉我。
此外,我相当确定我甚至不能使用Visual Studio 2010的CS(代码段)值,所以可能是这导致了我的问题...... CS始终等于35。 VS2010运行虚拟机,会导致汇编视图(alt+8)显示错误的地址吗?
这是我在这里的第一篇帖子,所以可能我没有表达清楚。如果我还可以解释得更清楚,请告诉我。
_ReturnAddress
内在函数即可。 - Raymond Chen