打印导入表

一、流程

1、File-> FileBuffer
2、定位导入表
3、循环导入表
4、获取导入表名字
5、获取INT表RVA
6、获取INT表的地址和序号
7、循环打印INT表的内容
8、获取IAT表RVA
9、获取IAT表的地址和序号
10、循环打印IAT表的内容

二、演示

1、File-> FileBuffer
2、定位导入表

   PIMAGE_DOS_HEADER pDosHeader = NULL;//DOS头
        PIMAGE_NT_HEADERS pNtHeader = NULL;//NT头
        PIMAGE_FILE_HEADER pFileHeader = NULL;//标准PE头
        PIMAGE_OPTIONAL_HEADER pOptionalHeader = NULL;//拓展PE头
        PIMAGE_IMPORT_DESCRIPTOR pImportDirectory = NULL; //导入表结构体

        pDosHeader = (PIMAGE_DOS_HEADER)pFileBuffer;
        pNtHeader = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + pDosHeader->e_lfanew);
        pFileHeader = (PIMAGE_FILE_HEADER)((DWORD)pNtHeader + 4);
        pOptionalHeader = (PIMAGE_OPTIONAL_HEADER)((DWORD)pFileHeader + IMAGE_SIZEOF_FILE_HEADER);


		DWORD ImportRva = pOptionalHeader->DataDirectory[1].VirtualAddress;	//导入表Rva
		DWORD ImportFoa = 0;

		//	(1)、判断导入表是否存在
		if (ImportRva == 0)
		{
			printf("导入表不存在!\n");
			return;
		}

		ImportFoa = RvaToFoa(ImportRva,pFileBuffer);//导入表FOA

		if (ImportFoa == 0)
		{
			printf("ImportFoa  Rva转Foa失败!\n");
			return;
		}

		pImportDirectory = (PIMAGE_IMPORT_DESCRIPTOR)((DWORD)pFileBuffer + ImportFoa);//获取导入表地址

3、循环导入表

while (pImportDirectory->FirstThunk && pImportDirectory->OriginalFirstThunk)
		{
			pImportDirectory++;
		}

4、获取导入表名字

printf("=========================ImportTable %s Start=============================\n", (PBYTE)((DWORD)pFileBuffer + RvaToFoa(pImportDirectory->Name,pFileBuffer)));
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值