我正在编写一个自定义模块来检查 EXE 文件的一致性(这不是这个问题的一部分。)为此,我需要知道 EXE 文件中某个资源的偏移量来计算 EXE 文件正文的大小我需要检查。
我想出了以下代码来获取文件中IDR_HTML_DLG
资源的偏移量strExeFilePath
:
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 文件本身大。知道如何纠正它吗?