我正在寫一個自定義模塊來檢查EXE文件的一致性(這不是這個問題的一部分)。爲此,我需要知道EXE文件中某個資源的偏移量來計算EXE文件的大小身體,我需要檢查。我可以使用C++在EXE文件中找到資源的偏移量嗎?
我想出了下面的代碼,以獲得一個在strExeFilePath
文件IDR_HTML_DLG
資源的偏移:
int ncbOffsetInBytes = 0;
HMODULE hModule = LoadLibrary(strExeFilePath);
if(hModule)
{
HRSRC hRes = ::FindResource(hModule, MAKEINTRESOURCE(IDR_HTML_DLG), RT_HTML);
if(hRes)
{
long szLength = ::SizeofResource(hModule, hRes);
HGLOBAL hGlobal = ::LoadResource(hModule, hRes);
if(szLength && hGlobal)
{
BYTE* pData = (BYTE*)LockResource(hGlobal);
DWORD dwLast = (DWORD)(pData + szLength);
DWORD dwFirst = (DWORD)hModule;
ncbOffsetInBytes = dwLast - dwFirst;
}
}
::FreeLibrary(hModule);
hModule = NULL;
}
但結果在ncbOffsetInBytes
原來比EXE文件本身更大。任何想法如何糾正它?
我認爲問題在於模塊沒有映射到單個塊的內存中,而是分成幾個部分:'.text',這裏的'.data',那裏的'.rcrc'。 ..而EXE的某些部分甚至可能根本就沒有加載! – rodrigo 2013-02-20 11:21:43
如果您可以發佈一段簡單地在DLL中定義資源的代碼,我可以看看我能否幫助解決它? – 2013-02-20 11:31:03
謝謝。我看到@羅德里戈點。你可能是對的,我在這裏沒有正確的軌道... – c00000fd 2013-02-20 11:34:05