LOAD_DLL_DEBUG_EVENT 时读取 DllName
这句话是说 lpImageName 和 hFile 存在关联(associated),不是一定指向!
继续读后面那句,“这个数字可能为NULL,或者包含着被调试进程空间中的一个字符串地址.这个地址,相反,也可能给空或者指向真正的文件名”
因此:必须从目标进程中读取两次,第一次读取字符串内存地址,第二次才是真正的读取文件名字符串。
1 case LOAD_DLL_DEBUG_EVENT: // DLL加载事件 2 ReadProcessMemory(pi.hProcess, de.u.LoadDll.lpImageName, &dwAddrImageName, sizeof(dwAddrImageName), &nNumberOfBytesRead); 3 ReadProcessMemory(pi.hProcess, (void*)dwAddrImageName, DllName, sizeof(DllName), &nNumberOfBytesRead); 4 if (de.u.LoadDll.fUnicode) { 5 wprintf(L"DLLNAME: %s\n", DllName); 6 } 7 else { 8 printf("DLLNAME: %s\n", DllName); 9 }