1

関数のスタックリターンアドレスをログに記録する方法を知りたいですか?

次のようなパラメーターをログに記録する場合:

int (WINAPI *pSend)(SOCKET s, const char* buf, int len, int flags) = send;
int WINAPI MySend(SOCKET s, const char* buf, int len, int flags);

// DllMain の下

int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
{
    fopen_s(&pSendLogFile, "C:\\SendLog.txt", "a+");
    fprintf(pSendLogFile, "%s\n", buf);
    fclose(pSendLogFile);
    return pSend(s, buf, len, flags);
}

では、Send のリターン アドレスをどのように記録すればよいでしょうか。

4

2 に答える 2

1

プラットフォーム/コンパイラに依存しない方法でこれを行うことはできません。Windows では、StackWalk/StackWalk64 関数を使用できます。私は数年前にそれらを使用しました。スタック上のモジュールのデバッグ情報があれば、関数の名前を取得できます。

たとえば、これを見てください: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680650(v=vs.85).aspx

于 2012-06-25T04:03:38.700 に答える