打印导入表

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++;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力不当无业游民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值