存档

文章标签 ‘RVA’

PE文件格式解析(五)——导出表的解析

2011年4月19日 没有评论

昨天看了一下PE感染的实现,发现还是存在很多疑问,所以决定继续写那个PE工具。这里要实现导出表的解析。
输出表一般存在于Dll之中,在Winnt.h中的定义如下:

typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD N[......]

继续阅读

分类: PE文件格式 标签: , , ,

PE文件格式解析(三)——导入表的解析

2011年4月16日 没有评论

在解析导入表之前,要先得到PE文件的数据目录表,数据目录表存在于可选头之中,以一个数组的形式存在,第二个元素指出导入表的一些信息。具体请参考《PE文件之IMAGE_OPTIONAL_HEADER》一文。
通过IMAGE_DATA_DIRECTORY的第二个VirtualAddress可以得到导入表的RVA(到处都是RVA,所以弄懂RVA的概念以及熟悉RVA与Offset的转换是十分重要的,具体请参考《PE文件格式解析(二)》一文)。将RVA转为Offset之后,就可以读取IMAGE_IMPORT[......]

继续阅读

分类: PE文件格式 标签: , ,

PE文件格式解析(二)

2011年4月14日 没有评论

本文为什么是二?(*^__^*) 嘻嘻……上一篇见《神奇的栈溢出》。最近我在用SDK写一个简单的PE格式解析工具,界面模仿LordPE。这个代码到最后面我会将完整的工程文件发布出来,所以,这里都讲一点点原理。
这几天在空余时间写了RVA和文件偏移的转换、节表的解析。
什么是RVA呢?当文件加载如内存的时候,会有一个基地址,一般exe默认为0×00400000(由可选头中的ImageBase域指定,具体可在链接时进行指定),假如说,该进程内存地址为0×00401000的地方,他[......]

继续阅读