能力值:
( LV2,RANK:10 )
|
-
-
2 楼
pe 标志------4byte
pe 文件头----20byte
pe 可选头----224byte
各段头部------n*40byte
加起来就行了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是这样算的么?
我看过很多手工改PE头的教程, 大部分是在 PE 字符 后面 找到 E0 这个E0就是PE 头的大小.
而这个E0就是十进制的224,如楼上所说, PE可选头就224了,那PE头不就得更大了?
可是那些教程按照E0改的PE都可以正常运行哦.
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
麻烦看一下这个文件的PE Header大小是多少,
类似这样的文件应该怎样去看呢.
谢谢.
|
能力值:
( 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了
这就是看到的信息了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢 hjjdebug 我理解起来还是有一点点困难.
我所说的PE Header是指 从那个标志位 PE 开始往下 终止位置应该到节表前面把(这个不太确定)? 这一块的大小是怎么看, 因为我看过一些手工修改PE头的教程, 移动这部分的位置,然后修正dosMZ处偏移量和块大小, PE运行是没有影响的. 但我就是找不准这块位置.
至于你上面解释的,我还想请问, 您是根据什么一下定位到1b0出开始看呢, 后面的内存位置0x0200处, 文件大小0x200, 文件偏移0x200 是根据什么来的, PE文件的固定相对位置还是什么,不过您说的大小是0x200, 我用LordPE打开里面的SizeOfHeaders 是这个数, 还有SizeOfOptionalHeader大小是 E0 . 于是我又云里雾里了...
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
大侠哪去了,帖子都掉后面去了...
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
这部分起始位置,有dos header ->e_lfanew 给出, 就是0x3c 处的位置。为0x000000b0,
大小:0x4+0x14+0xe0=0xf8, 前面已经说了(前面计算大小错了,多加了起始地址0xb0)。大小固定。
然后就得到节表开始地址: 0xb0+0xf8 = 0x1a8 , 指的正好是text 段位置。
我还想请问, 您是根据什么一下定位到1b0出开始看呢,
我看到了第一个段.text 段名字, 这块数据是.text 段节表头。
完整的理解你可以看一看 新兵论坛 置顶的 由 笨笨雄版主推荐的 pe 启发式学习 第一部分。 可能内容比较多,你要有时间阅读。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢hjjdebug
大概明白多了, 其实从PE标志位开始, 到.text节表前那一块大小是固定值吧。
背过就是了对不。
我回头再看看那个启发式学习教程。
感谢。
|
|
|