草庐IT

c++ - IMAGE_SECTION_HEADER的VirtualAddress和PointerToRawData的区别

在this文章,定义是DWORD虚拟地址InEXEs,thisfieldholdstheRVAtowheretheloadershouldmapthesection.Tocalculatetherealstartingaddressofagivensectioninmemory,addthebaseaddressoftheimagetothesection'sVirtualAddressstoredinthisfield.DWORDPointerToRawDataThisisthefile-basedoffsetofwheretherawdataemittedbythecompiler

驱动开发:PE导出函数与RVA转换

在笔者上篇文章《驱动开发:内核扫描SSDT挂钩状态》中简单介绍了如何扫描被挂钩的SSDT函数,并简单介绍了如何解析导出表,本章将继续延申PE导出表的解析,实现一系列灵活的解析如通过传入函数名解析出函数的RVA偏移,ID索引,Index下标等参数,并将其封装为可直接使用的函数,以在后期需要时可以被直接引用,同样为了节约篇幅本章中的LoadKernelFile()内存映射函数如需要使用请去前一篇文章中自行摘取。首先实现GetRvaFromModuleName()函数,当用户传入参数后自动将函数名解析为对应的RVA偏移或Index下标索引值,该函数接收三个参数传递,分别是wzFileName模块名,

c++ - 解析 PE 文件中导入和导出表的 RVA

我目前正在编写PE解析器/加载器。我已经使用标准c文件io成功地将PE文件加载到内存中,检索到有效的DOS和PEheader(可选header)以及获得对PE部分的访问权限。我的下一个目标是访问导出表以检索导出的符号。为此,我使用了存储在索引0处的可选header数据字典数组中的RVA(我相信它指向导出表)并将该地址添加到加载到程序内存中的PE文件的地址,然后将其转换为有效的导出表头。当我这样做时,我正在打开NULL地址和数据。这是一个小代码片段;//RVAfromoptionalheadersdatadictionariesarraycasttoExportdirectorytype