C++ 为什么dbghelp.h';s符号相关函数始终返回126个错误代码?
当我尝试使用函数SymbolFromName()e SymbolFromAddress()时,返回代码总是返回126(未找到模块),代码是:C++ 为什么dbghelp.h';s符号相关函数始终返回126个错误代码?,c++,windows,winapi,dbghelp,C++,Windows,Winapi,Dbghelp,当我尝试使用函数SymbolFromName()e SymbolFromAddress()时,返回代码总是返回126(未找到模块),代码是: #include<dbghelp.h> #include <iostream> #include <Windows.h> #include <windows.h> #include <debugapi.h> #include <WinBase.
#include<dbghelp.h>
#include <iostream>
#include <Windows.h>
#include <windows.h>
#include <debugapi.h>
#include <WinBase.h>
using namespace std;
int main(){
DWORD error;
HANDLE hProcess;
SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
hProcess = GetCurrentProcess();
if (!SymInitialize(hProcess, NULL, TRUE))
{
// SymInitialize failed
error = GetLastError();
cout << "SymInitialize returned error " << error << endl;;
return FALSE;
}}
hProcess = GetCurrentProcess();
SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
SymInitialize(hProcess, NULL, TRUE);
TCHAR szSymbolName[MAX_SYM_NAME];
ULONG64 buffer[(sizeof(SYMBOL_INFOW) +
MAX_SYM_NAME * sizeof(TCHAR) +
sizeof(ULONG64) - 1) /
sizeof(ULONG64)];
PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
_tcscpy_s(szSymbolName, MAX_SYM_NAME, TEXT("mainCRTStartup")); // i
know the entrypoint name by using >>nm command in windows for extract
symbol
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = MAX_SYM_NAME;
if (SymFromName(hProcess, szSymbolName, pSymbol)){
cout << pSybol->address
} // this return always 126
}
我还尝试使用不同的符号名称,如main、mainCRTStartup、wWinMain、WinMain等,但没有任何结果我可以复制它,但是如果我将
“WinMainCRTStartup”
替换为“main”
,它可以工作。您确定您的exe文件包含符号WinMainCRTStartup
?控制台程序不使用此符号,但它使用的是mainCRTStartup
。我还尝试了main、wmain、maincrtup、wmainCRTSurtup以及其他,结果是mainCRTStartup
,而不是maincrturtup
,请检查。否则,显示代码中有一些错误(尽管只有一些头文件和括号)。解决问题后,mainCRTStartup
对我来说运行良好,但WinMainCRTStartup
没有。因此,您确定您的exe文件包含符号WinMainCRTStartup
?我可以复制这个,但是如果我用“main”
替换“WinMainCRTStartup”
,它会工作。您确定您的exe文件包含符号WinMainCRTStartup
?控制台程序不使用此符号,但它使用的是mainCRTStartup
。我还尝试了main、wmain、maincrtup、wmainCRTSurtup以及其他,结果是mainCRTStartup
,而不是maincrturtup
,请检查。否则,显示代码中有一些错误(尽管只有一些头文件和括号)。解决问题后,mainCRTStartup
对我来说运行良好,但WinMainCRTStartup
没有。因此,您确定您的exe文件包含符号WinMainCRTStartup
?
00401300 T _WinMainCRTStartup
00401460 T _main
004012e0 T _mainCRTStartup