2010-12-31 4 views
1
[IMAGEHLP_SYMBOL64][1] *pSym = NULL; 
[IMAGEHLP_LINE64][2] Line; 
STACKFRAME64 s; 
int d = 0; 

//In my code I obtain the return address from the stack frame of function foo() which was called from function bar() and assign it to s.AddrPC.Offset. Now I call - 

SymGetLineFromAddr64(this->m_hProcess, s.AddrPC.Offset, &(d), &Line) 

SymGetSymFromAddr64(this->m_hProcess, s.AddrPC.Offset, &(d), pSym)) 

//We pass the current process HANDLE 
//pSym->Name = bar 

これらは何のアドレスが含まれていますか?SymGetLineFromAddr64()とSymGetSymFromAddr64()WinAPI関数を呼び出した後、どのようなアドレスが得られますか?

が見つかりました! pSym->アドレスは、関数名

の仮想アドレスを与える私は長い時間のためにこれを理解しようとしています。どんな助けもありがとう。ここで

+0

質問を編集して回答を入れる代わりに、実際の回答を以下に記入して受け入れてください。 – jalf

+0

@jalf:これは完全な答えではなく、自分の答えを受け入れることは望ましくありません。私が答えを見つけたら、私はその質問を削除するでしょう。 – Bruce

+0

意見の数で判断すると、私は誰も質問に興味がないと思う:)しかし、私はあなたの視点を理解し、質問を削除しません。私は誰か他の人に質問に答えてポイントを得るチャンスを与えたいと思います。 – Bruce

答えて

0

は、あなたが探していたものです。help pageから

IMAGEHLP_SYMBOL64の構造は以下の通りである:

シンボルのアドレスであること
typedef struct _IMAGEHLP_SYMBOL64 { 
    DWORD SizeOfStruct; 
    DWORD64 Address; 
    DWORD Size; 
    DWORD Flags; 
    DWORD MaxNameLength; 
    TCHAR Name[1]; 
} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; 

Address。あなたのケースでは

pSym->Addressは、関数名ため仮想アドレスのように見えます。

この質問はまたStackWalk64 on Windows - Get symbol nameに非常によく似ています。

関連する問題