関数を呼び出した関数のアドレスをインライン アセンブリで取得する方法を知りたいです。私の考えは、mine を呼び出した関数が戻るアドレスを取得し、その前の命令 (つまり、mine を呼び出した関数の呼び出し) を使用して、mine を呼び出した関数のアドレスを取得し、それに与えられたオフセットに追加することです。次の命令のアドレスへの呼び出し (私の呼び出した関数が戻るアドレス)。これまでのところ、これを作成することはできましたが、私のアドレスを取得することはできませんでした。それはかなり簡単で、うまくいきます:
_asm
{
mov eax, [ebp+4]
mov returnTo,eax
}
long addressOfMine = (*((long*)(returnTo - sizeof(long)))) + returnTo)
これにより、私のアドレスがうまく取得されます。([ebp+4] が私の返信先のアドレスであることを知ることによって)
同じことをするために、1ステップ上で、古いebpを取得して同じことを試みました。[ebp + 0]が古いebpであることをサイトで見たので、試しました:
_asm
{
mov eax, [ebp]
mov ebx, [eax+4]
mov returnTo,ebx
}
long addressOfCaller = (*((long*)(returnTo - sizeof(long)))) + returnTo)
しかし、うまくいきません。それで、私の仮定が間違っているか、何か間違ったことをしているので、あなたの助けを求めたいと思います.