|

分享源码
界面截图: |
|
是否带模块: |
纯源码 |
备注说明: |
- |
起因是想研究一下ASLR.找了一圈发现易并没有这相关的资料,就开始研究PE头.
论坛上的PE类源码并没有多少 很多还是调用各种模块或声明一堆自定义数据类型.不管用得着还是用不着的 都一起塞进去.
这样的方式太臃肿 扣源码太麻烦.感觉除了做PE分析器以外.其实很多东西都是用不着的 大多数情况下 只需要取出特定的值.
所以写了一个简单的例子并付上详细备注+结构说明.大家要使用的时候 调整一下直接取出所需的内容就行了.
变量名 | 类 型 | 静态 | 数组 | 备 注 | DOS | 字节集 | | | e_magic | 短整数型 | | | e_lfanew | 整数型 | | | Signature | 整数型 | | | FileHeader | 字节集 | | | OptionalHeader | 字节集 | | | NumberOfSections | 短整数型 | | | ImageBase | 整数型 | | | SectionTable | 字节集 | | | i | 整数型 | | |
如果真 (取字节集长度 (BIN ) < 1024 ) 返回 (0 )
DOS = 取字节集中间 (BIN, 1, 64 )e_magic = 取字节集数据 (DOS, #短整数型, 1 )e_lfanew = 取字节集数据 (DOS, #整数型, 61 ) 如果真 (e_magic ≠ 23117 或 e_lfanew ≤ 0 ) 返回 (0 )
Signature = 取字节集数据 (BIN, #整数型, e_lfanew + 1 ) FileHeader = 取字节集中间 (BIN, e_lfanew + 5, 20 ) OptionalHeader = 取字节集中间 (BIN, e_lfanew + 25, 224 ) 如果真 (Signature ≠ 17744 或 取字节集长度 (FileHeader ) ≠ 20 或 取字节集长度 (OptionalHeader ) ≠ 224 ) 返回 (0 )
NumberOfSections = 取字节集数据 (FileHeader, #短整数型, 3 ) ImageBase = 取字节集数据 (OptionalHeader, #整数型, 29 ) SectionTable = 取字节集中间 (BIN, e_lfanew + 249, NumberOfSections × 40 ) 变量循环首 (0, NumberOfSections - 1, 1, i ) 到文本 (取字节集中间 (SectionTable, 1 + i × 40, 8 )) 变量循环尾 ()返回 (ImageBase )
|
评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 精品特辑|主题: 803, 订阅: 17
- · 好贴精选|主题: 88, 订阅: 0
|