Какие адреса мы получаем после вызова функций WinAPI SymGetLineFromAddr64 () и SymGetSymFromAddr64 ()? - PullRequest
1 голос
/ 31 декабря 2010
[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

Какие адреса они содержат?

Line.Address;

pSym->Address; 

Найдено!pSym-> Address дает виртуальный адрес для имени функции

Я пытался понять это в течение длительного времени.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 31 мая 2016

Вот что вы искали:

со страницы справки , структура 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 в Windows - Получить имя символа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...