PE头-关于导入表的计算

导读:本篇文章讲解 PE头-关于导入表的计算,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

我们使用01Editor观察任意标准程序,比如笔记本notepad.exe。

在节NTHeader的DataDirArray的Import

PE头-关于导入表的计算

 

 

我们得到

记录导入表的RVA:7604H。

虽然记录在VritualAddress的字段中但是值为RVA。

那么怎么得到导入表呢?

  1. 判断RVA所处的节并获取节的ViatualAddress
  2. 计算RVA与RVA所处的节的ViatualAddress的偏移值
  3. 计算偏移值+RVA所处的节的PointerToRawData并得到导入表的位置

第一步,我们要判断RVA所处的节的位置,这个过程是

PE头-关于导入表的计算

 

 

 判断SectionHeader节点的VirtualAddress+SizeofRawData大于等于RVA。

当某个节点成立时,RVA则属于这个节。

本文中则是属于第一节也就是下标为0的SechitonHeaders【0】

 

第二步,计算偏移值

这个偏移值为RVA-VirtualAddress

在本文中则为

7604h-1000h=6604h

 

第三步 计算文件位置

偏移值+PointerToRawData即为文件位置

6604h+400h=6A04h

这个值就是导入表的结构体的值

PE头-关于导入表的计算

 

 

 

 

 

那么如何计算具体使用了什么函数呢呢?

我们来计算一下INT的算法吧。

PE头-关于导入表的计算

我们已INT为例,也就是Import Name Table的缩写。意思是导入了什么函数。

OriginalFirstThunk这个字段的值是RVA,指向一个import by name的结构体。这个结构体中有俩个字段,第一个字段就是固有编号,长度为两个字节。第二个是字段是代表名字的数组,长度是比特数组。

那么怎么得到这个import by name的结构体?

还是一样重复上面计算导入表的过程。

也即是

1 判断RVA的节 =>0节

2 偏移值=>7990h-1000h=6990h

3 计算文件位置= >6990h+400h=6D90h

我们跳转到6d90这个位置,这个位置的值指向import by name的结构体,所以我们还要重复一次上述计算的过程=》7A7A-1000+400=6E7A

PE头-关于导入表的计算

 

 这样我们就计算完成了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/12570.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!