打印重定位表

一、流程

1、File-> FileBuffer
2、获取头信息
3、获取结构体数组的信息
4、获取导出表的地址RVA和FOA
5、获取导出表在文件中的地址
6、循环重定位表
7、获取数据块的FOA
8、判断数据块在那个节中
9、获取要修改数据的个数和位置
10、循环要修改的数据并判断是否要修改
11、指向下一个数据块

二、流程

1、File-> FileBuffer
2、获取头信息
3、获取结构体数组的信息

	//指向数组
	PIMAGE_DATA_DIRECTORY	pDataDirectory = pOptionHeader->DataDirectory;

4、获取导出表的地址RVA和FOA

	//重定位表的地址Rva
	DWORD dwRelocationTableRva = pDataDirectory[5].VirtualAddress;
	//重定位表的地址Foa
	DWORD dwRelocationTableFoa = RvaToFoa(pFileBuffer,dwRelocationTableRva);

5、获取导出表在文件中的地址

	//重定位表在文件中的地址
	PIMAGE_BASE_RELOCATION pRelocationTable = (PIMAGE_BASE_RELOCATION)((DWORD)pFileBuffer + dwRelocationTableFoa);

6、循环重定位表

//循环重定位表
	for(int i=1 ; pRelocationTable->SizeOfBlock && pRelocationTable->VirtualAddress ; i++)
	{
	}

7、获取数据块的FOA

	//重定位表中数据的Foa
		DWORD Foa = RvaToFoa(pFileBuffer,pRelocationTable->VirtualAddress);	

8、判断数据块在那个节中

	//循环判断数据在哪个节中
		for(int t=0 ; pNTHeader->FileHeader.NumberOfSections ; t++)
		{
			//节的起始和结束位置
			DWORD Begin = RvaToFoa(pFileBuffer,pSectionHeader[t].VirtualAddress);
			DWORD End	= RvaToFoa(pFileBuffer,pSectionHeader[t].Vir
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值