4.5 地址转换器
前面介绍了关于PE文件的3种地址,分别是VA(虚拟地址)、RVA(相对虚拟地址)和FileOffset(文件偏移地址)。3种地址的转换如果始终使用手动来计算那是非常累的,因此通常的做法是借助工具来完成。前面介绍了使用LordPE来计算这3种地址的转换,现在来编写一个对这3种地址进行转换的工具。该工具如图4-33所示。
图4-33 地址转换器
这个工具是在前两个工具的基础上完成的。因此,在进行计算的时候,应该先要进行“查看”,然后再进行“计算”。否则,该获取的指针还没有获取到。
在界面上,左边的3个按钮是“单选框”,单选框的设置方法如图4-34所示。
图4-34 对单选框的设置
3个单选框中只能有一个是选中状态,为了记录哪个单选框是选中状态,在类中定义一个成员变量m_nSelect。分别对3个单选框使m_nSelect为1、2和3三个值。关于界面的编程大家自己参考源代码,这里就不进行过多的介绍了。来看主要的代码。
在单击“计算”按钮后,响应该按钮的代码如下:
分别看一下GetAddr()、GetAddrInSecNum()和 CalcAddr()的实现。
获取在编辑框中输入的地址内容的代码:
获取该地址所属的第几个节的代码:
计算其他地址的代码:
代码都不复杂,关键就是在CalcAddr()中3种地址的转换。如果没能理解代码,那么请参考前面手动转换3种地址的方法。这里就不进行介绍了。