我目前正在编写PE解析器/加载器.我已经使用标准c文件io成功地将PE文件加载到内存中,检索有效的DOS和PE头(可选标头)以及访问PE的部分.我的下一个目标是获取对Export表的访问权以检索导出的符号.为此,我使用了存储在索引0的可选头数据字典数组中的RVA(我相信它指向导出表)并将此地址添加到加载到程序存储器中的PE文件的地址,然后将其转换为有效的导出表头.当我这样做时,我正在调出NULL地址和数据.这是一个小代码片段;
// RVA from optional headers data dictionaries array cast to Export directory type
IMAGE_EXPORT_DIRECTORY* ied(
(IMAGE_EXPORT_DIRECTORY*)((void*)
((unsigned char*)buffer + ioh->DataDirectory[0].VirtualAddress)));
Run Code Online (Sandbox Code Playgroud)
我是否必须使用内存映射IO来正确执行此操作?我在计算地址错了吗?有关PE RVA的信息似乎很少.提前致谢.