void printImport(char* buffer)
{
PIMAGE_DOS_HEADER pDosH = (PIMAGE_DOS_HEADER)(buffer);
PIMAGE_NT_HEADERS pNTH = (PIMAGE_NT_HEADERS)(buffer + pDosH->e_lfanew);
PIMAGE_FILE_HEADER pFH = (PIMAGE_FILE_HEADER)((char*)pNTH + 0x4);
PIMAGE_OPTIONAL_HEADER pOH = (PIMAGE_OPTIONAL_HEADER)((char*)pFH + 0x14);
int opHeaderLen = int(pFH->SizeOfOptionalHeader);
PIMAGE_SECTION_HEADER pSecH = (PIMAGE_SECTION_HEADER)((char*)pOH + opHeaderLen);
PIMAGE_DATA_DIRECTORY pDD = (PIMAGE_DATA_DIRECTORY)(&(pOH->DataDirectory[1]));
int importVAddress = pDD->VirtualAddress;
int importFAddress = rvaTofoa(importVAddress, buffer);
PIMAGE_IMPORT_DESCRIPTOR pID = (PIMAGE_IMPORT_DESCRIPTOR)((char*)buffer + importFAddress);
//cout << hex << importFAddress << endl;
while(pID->Name != 0)
{
int nameVA = pID->Name;
char* nameFA = (char*)buffer + rvaTofoa(nameVA,buffer);
printf("Dll======%s======\r\n", nameFA);
int OriginalFirstThunk = pID->OriginalFirstThunk;
PDWORD p = (PDWORD)((char*)buffer + rvaTofoa(OriginalFirstThunk, buffer));
while (*p != 0)
{
int num = *p;
int flag = num & 0x80000000;
if (flag != 0)
{
int ord = num & 0x7FFFFFFF;
printf("通过序号导入,序号为%d\r\n", ord);
}
else
{
int IBNVA = num & 0x7FFFFFFF;
PIMAGE_IMPORT_BY_NAME pIBN = (PIMAGE_IMPORT_BY_NAME)(buffer + rvaTofoa(IBNVA, buffer));
printf("通过名称导入,%s的rva:%08x\r\n", (char*) & (pIBN->Name), IBNVA);
}
p++;
}
pID++;
}
}
打印导入表
最新推荐文章于 2023-04-19 23:58:22 发布