Мой исполняемый файл не запускается в Windows.Как отладить неудачную загрузку DLL? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытался на прошлой неделе скомпилировать мой linux-код в windows env, после того, как весь мой код был скомпилирован, он не смог запустить мои исполняемые файлы, так как он не смог загрузить мою dll сам.

Мой проект состоит из 1 исполняемого файла с именем (pcie_logger) и 1 DLL (libpci_test.dll), которые связаны с несколькими статическими библиотеками в Windows, DLL загружается динамически только при запуске.

PcieLogger.cpp:

int
main(int argc, char* argv[])
{
LIB_TRACK2(__PRETTY_FUNCTION__);
PcieLogger tool;
printf("Hello World\n");
return PciTest::main(tool, argc, argv);
}

PcieLogger.h:

#include "PciTest.h"

class PcieLogger: public PciTool {
public:
PcieLogger(): PciTool(){}
virtual ~PcieLogger() = default;
virtual u_int32_t   AddParserParams() override;
u_int32_t           Run() override;
};

PciTest.cpp:

 #ifdef _WIN32
BOOL APIENTRY DllMain( HANDLE hModule,
                   DWORD ul_reason_for_call,
                   LPVOID lpReserved
                   )
 {
printf("PciTest::DllMain\n");
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
    break;

case DLL_PROCESS_DETACH:
    // DisconnectFromDriver();
    break;

case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
    break;
}
return TRUE;
}

#endif


int PciTest::main(PciTest& test, int argc, char* argv[]) {
    printf("PciTest::main\n");
    testInstance = &test;
    int status = 0;
try {
    status = status || test.AddParserParams();
    status = status || test.ParseArgs(argc, argv);
    status = status || test.InitResources(argv[0]);
    status = status || test.Run();
} catch (exception& e) {
    test.mainExceptionTagsHandle(e.what());
    status = 1;
}
test.handleTestFinish(status);
return status;
}

Когда я пытаюсь запустить windbg на моем исполняемом файле, я получаю следующее:

(558.20fc): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for 
z:\compiled\libpci_test.dll - 
libpci_test!ZN7PciTest4mainERS_iPPc+0x3c53b:
00000000`00f6592b 64488b042500000000 mov   rax,qword ptr fs:[0] 
fs:00000000`00000000=????????????????
0:000> 
...