1 IMAGE_EXPORT_DIRECTORY STRUCT【导出表,共40字节】
2 {
3 +00 h DWORD Characteristics ; 未使用,总是定义为0
4 +04 h DWORD TimeDateStamp ; 文件生成时间
5 +08 h WORD MajorVersion ; 未使用,总是定义为0
6 +0A h WORD MinorVersion ; 未使用,总是定义为0
7 +0C h DWORD Name ; 模块的真实名称
8 +10 h DWORD Base ; 基数,加上序数就是函数地址数组的索引值
9 +14 h DWORD NumberOfFunctions ; 导出函数的总数
10 +18 h DWORD NumberOfNames ; 以名称方式导出的函数的总数
11 +1C h DWORD AddressOfFunctions ; 指向输出函数地址的RVA
12 +20 h DWORD AddressOfNames ; 指向输出函数名字的RVA
13 +24 h DWORD AddressOfNameOrdinals ; 指向输出函数序号的RVA
14 };IMAGE_EXPORT_DIRECTORY ENDS
首先说明自身情况
我是在学的PE,看了视频,看百度上的文章,感觉太过于程序化.我感觉有点难以理解.
所以希望对这个懂的童鞋,能给我解惑一下.谢谢您勒。
首先请看我的代码,内存之上的是我打开了一个 USER32.DLL的文件.
程序的目的是为了输出 IMAGE_EXPORT_DIRECTORY 结构体的信息
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
根据指示,我得知IMAGE_DATA_DIRECTORY 的 第0项保存着导出表信息
使用代码获取无误.与LOADPE载入后没有任何差距.
----------------------------------------------------------------------------
问题 1:我载入的是DLL文件,如果我载入一个EXE模块.并且这个模块里有 USER32.DLL NTDLL.DLL 那么我第0项之内输出其中一个,那么其它的DLL 怎么办?
问题2:第七项 [+0C h DWORD Name ; 模块的真实名称]
名称是一个DWORD类型, 我猜测这是一个偏移.
但这个 便宜是基于内存什么地方的偏移尼?
是这样吗: [内存首地址 + IMAGE_DATA_DIRECTORY 结构体地址 + Name] 得出名称?
还是说: 【内存收地址 + Name 偏移】
试过了几个!都挂了~访问内存失败。什么的 原因
我感觉这个问题确实有点2 .但是是有点混乱。所以请赐教.
----------------------------------------------------------------------------
语言描述不到位.如果没看懂那个问题.可以留言 thx
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)