略略略略略略略略略略略略略略略 .....
废话不多说,直接上操作..
struct st_OBJ {
private:
DWORD RelCount = 0;
DWORD LineCount = 0;
public:
IMAGE_FILE_HEADER*pHeader;
IMAGE_OPTIONAL_HEADER*pOptionl;
IMAGE_SECTION_HEADER*pSec;
IMAGE_RELOCATION*pRel;
IMAGE_LINENUMBER*pLineNumber;
IMAGE_SYMBOL*pSymbol;
DWORDStringTableSize;
char*pStringTable;
st_OBJ (PCH pData) {
pHeader = (IMAGE_FILE_HEADER*)pData;
pData += sizeof (IMAGE_FILE_HEADER);
pOptionl = (IMAGE_OPTIONAL_HEADER*)pData;
pData += pHeader->SizeOfOptionalHeader;
pSec = (IMAGE_SECTION_HEADER*)pData;
pData += pHeader->NumberOfSections * sizeof (IMAGE_SECTION_HEADER);
for (size_t i = 0; i < pHeader->NumberOfSections; i++) {
RelCount += pSec[i].NumberOfRelocations;
LineCount += pSec[i].NumberOfLinenumbers;
}
pRel = (IMAGE_RELOCATION*)pData;
pData += RelCount * sizeof (IMAGE_RELOCATION);
pLineNumber = (IMAGE_LINENUMBER*)pData;
pData += LineCount * sizeof (IMAGE_LINENUMBER);
pSymbol = (IMAGE_SYMBOL*)((PCH)pHeader + pHeader->PointerToSymbolTable);// pData;
pData += pHeader->NumberOfSymbols * sizeof (IMAGE_SYMBOL);
StringTableSize = *(DWORD*)pData;
pData += sizeof (DWORD);
pStringTable = (char*)pData;
}
};
///////////////
///////////////
///////////////
///////////////
///////////////
///////////////
///////////////
///////////////
///////////////
///////////////