取函数地址的一点疑问
ULONG myfuncaddr;
myfuncaddr=*(ULONG*)((byte*)mymessageboxa+1)+(ULONG)mymessageboxa+5;
mymessageboxa是一个自定义的API函数 定义如下:
__declspec(naked) int mymessageboxa(HWND hwnd, LPCTSTR lptext, LPCTSTR lpcaption, UINT utype)
{
printf("mymessageboxa is called\r\n");
_asm
{
pop head
pop hwnd
pop lptext
pop lpcaption
pop utype
}
myfunc();//可以加入函数过程
_asm
{
//压栈过程
push utype
push lpcaption
push lptext
push hwnd
push head
//跳回messageboxa 入口点
jmp jmp_back;
ret;
}
}
小弟想知道为什么经过那样的转换 myfuncaddr 就得到了 mymessageboxa的实际地址呢?