Как исправить ошибку ERROR_INVALID_ADDRESS (ошибка 487), возвращаемую SymFromAddr - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь получить имя функции по адресу.

Я использую VS Community 2019, и мой первый шаг - скопировать примеры Microsoft, которые вы можете найти по адресу:https://docs.microsoft.com/en-us/windows/desktop/debug/initializing-the-symbol-handler
https://docs.microsoft.com/en-us/windows/desktop/debug/retrieving-symbol-information-by-address

#include <stdio.h>
#include <windows.h>
#include <dbghelp.h>

#pragma comment(lib, "dbghelp")

int main() {

     DWORD64  SOME_ADDRESS = (DWORD64) (main);

    // https://docs.microsoft.com/en-us/windows/desktop/debug/initializing-the-symbol-handler

    DWORD  error;
    HANDLE hProcess;

    SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);

    hProcess = GetCurrentProcess();

    if (!SymInitialize(hProcess, NULL, TRUE))
    {
        // SymInitialize failed
        error = GetLastError();
        printf("SymInitialize returned error : %d\n", error);
        return FALSE;
    }

    // https://docs.microsoft.com/en-us/windows/desktop/debug/retrieving-symbol-information-by-address

    DWORD64  dwDisplacement = 0;
    DWORD64  dwAddress = SOME_ADDRESS;

    char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
    PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;

    pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
    pSymbol->MaxNameLen = MAX_SYM_NAME;

    if (SymFromAddr(hProcess, dwAddress, &dwDisplacement, pSymbol))
    {
        // SymFromAddr returned success
    }
    else
    {
        // SymFromAddr failed
        DWORD error = GetLastError();
        printf("SymFromAddr returned error : %d\n", error);
    }

}

Но этот код печатает всегда "SymFromAddr вернул ошибку: 487" ...Я думаю, что я делаю что-то не так.Вы можете помочь?

Спасибо,Alberto

...