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