首页
社区
课程
招聘
[旧帖] [已解决]请问PE Header的大小如何确定。 0.00雪花
发表于: 2008-6-18 00:15 4564

[旧帖] [已解决]请问PE Header的大小如何确定。 0.00雪花

2008-6-18 00:15
4564
知道了DosMZ偏移 PE Header 偏移

那么 PE header大小如何确定

是不是大多数PE程序的Header大小都是E0H 呢。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
pe 标志------4byte
pe 文件头----20byte
pe 可选头----224byte
各段头部------n*40byte

加起来就行了
2008-6-18 06:39
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是这样算的么?

我看过很多手工改PE头的教程, 大部分是在 PE 字符 后面 找到 E0  这个E0就是PE 头的大小.

而这个E0就是十进制的224,如楼上所说, PE可选头就224了,那PE头不就得更大了?

可是那些教程按照E0改的PE都可以正常运行哦.
2008-6-18 09:47
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
麻烦看一下这个文件的PE Header大小是多少,
类似这样的文件应该怎样去看呢.

谢谢.
上传的附件:
2008-6-18 10:57
0
雪    币: 107
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
pe 中有很多header
你所说的PE header 大小到底是指谁的大小?
如果是指NT header 大小, msdn 中是这样定义的
typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature;        //这里的标记是 PE00
    IMAGE_FILE_HEADER FileHeader;    //NT header 包含FILE header 和Option header
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32
其大小为4+0x14+0xe0=0x1a8 字节。

看样子你好像是指代码段之前所有的空间,包括dos 头,dos体,文件头,可选头,节表,考虑到对齐的关系,在内存中往往占0x1000字节,在文件中占0x200字节。
具体到你这个文件,看1b0 处,指明text段大小0x68, 在内存位置0x0200处, 文件大小0x200, 文件偏移0x200,所以这里的PE 头部就是0x200了
这就是看到的信息了。
2008-6-18 12:10
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢 hjjdebug 我理解起来还是有一点点困难.

我所说的PE Header是指 从那个标志位 PE 开始往下 终止位置应该到节表前面把(这个不太确定)? 这一块的大小是怎么看, 因为我看过一些手工修改PE头的教程, 移动这部分的位置,然后修正dosMZ处偏移量和块大小, PE运行是没有影响的. 但我就是找不准这块位置.

至于你上面解释的,我还想请问, 您是根据什么一下定位到1b0出开始看呢, 后面的内存位置0x0200处, 文件大小0x200, 文件偏移0x200 是根据什么来的, PE文件的固定相对位置还是什么,不过您说的大小是0x200, 我用LordPE打开里面的SizeOfHeaders 是这个数, 还有SizeOfOptionalHeader大小是 E0 .  于是我又云里雾里了...
2008-6-18 12:55
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
大侠哪去了,帖子都掉后面去了...
2008-6-19 12:33
0
雪    币: 107
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
这部分起始位置,有dos  header  ->e_lfanew  给出,  就是0x3c  处的位置。为0x000000b0,
大小:0x4+0x14+0xe0=0xf8,  前面已经说了(前面计算大小错了,多加了起始地址0xb0)。大小固定。
然后就得到节表开始地址:  0xb0+0xf8  =  0x1a8 , 指的正好是text 段位置。
我还想请问, 您是根据什么一下定位到1b0出开始看呢, 

我看到了第一个段.text 段名字, 这块数据是.text 段节表头。
完整的理解你可以看一看 新兵论坛 置顶的 由 笨笨雄版主推荐的 pe 启发式学习 第一部分。 可能内容比较多,你要有时间阅读。
2008-6-19 17:05
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢hjjdebug

大概明白多了, 其实从PE标志位开始, 到.text节表前那一块大小是固定值吧。

背过就是了对不。

我回头再看看那个启发式学习教程。

感谢。
2008-6-19 19:36
0
游客
登录 | 注册 方可回帖
返回
//