本来是准备用在项目里的,只是因为某些原因弃用了该方案,所以发出来算了
略略略略略略略略略略略略略略略 .....
效果图如下
废话不多说,直接上操作..
所以,我们需要从obj里面提取我们想要的数据
大致解析了一下obj,
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;
}
};
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);
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
上传的附件: