首页
社区
课程
招聘
IMAGE_DOS_HEADER的e_lfanew是怎么计算出来的?(已解决)
发表于: 2006-9-1 10:10 11172

IMAGE_DOS_HEADER的e_lfanew是怎么计算出来的?(已解决)

2006-9-1 10:10
11172
如题!二进制打开PE文件发现有几个文件的e_lfanew是不一样的。这个值是怎么计算出来的?

如何手工确定每个PE文件中IMAGE_DOS_HEADER到IMAGE_NT_HEADER之间标准距离?
(想手工构件PE,不知道这样问是否正确,晕)

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
0   WORD   e_magic;                     // Magic number
2   WORD   e_cblp;                      // Bytes on last page of file
4   WORD   e_cp;                        // Pages in file
    WORD   e_crlc;                      // Relocations
    WORD   e_cparhdr;                   // Size of header in paragraphs
    WORD   e_minalloc;                  // Minimum extra paragraphs needed
    WORD   e_maxalloc;                  // Maximum extra paragraphs needed
    WORD   e_ss;                        // Initial (relative) SS value
    WORD   e_sp;                        // Initial SP value
    WORD   e_csum;                      // Checksum
    WORD   e_ip;                        // Initial IP value
    WORD   e_cs;                        // Initial (relative) CS value
    WORD   e_lfarlc;                    // File address of relocation table
    WORD   e_ovno;                      // Overlay number
    WORD   e_res[4];                    // Reserved words
24   WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
26   WORD   e_oeminfo;                   // OEM information; e_oemid specific
28   WORD   e_res2[10];                  // Reserved words
3c   LONG   e_lfanew;                    // File address of new exe header             //文件头偏移0x3c处,每个程序都是这个偏移
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
2006-9-1 10:28
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 kanxue 发布
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
0 WORD e_magic; // Magic number
2 WORD e_cblp; // Bytes on last page of file
4 WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
........


谢谢坛主,我知道e_flanew在0x3c处,但这个值应该怎么计算呢?
我打开过几个文件好想不太一样,
第一个文件:[0x3c] = B0
第二个文件:[0x3c] = B8
第三个文件:[0x3c] = E0

为什么它们的e_flanew值都不一样呢?换句话说,IMAGE_DOS_HEADER 到IMAGE_NT_HEADER之间的内容为什么每个文件都不一样呢?
2006-9-1 11:12
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
e_lfanew是一个指针,它指向PE头:
IMAGE_NT_HEADERS STRUCT
  Signature         DWORD                   ?
  FileHeader        IMAGE_FILE_HEADER       <>
  OptionalHeader    IMAGE_OPTIONAL_HEADER32 <>
IMAGE_NT_HEADERS ENDS

IMAGE_DOS_HEADER 到IMAGE_NT_HEADER之间的内容不一样很正常,因为你可以将e_lfanew指向其他合法的地址。这段空闲一般程序默认存放:This program cannot be run in DOS mode.,你也可以放一段真的DOS代码到里面。
2006-9-1 11:24
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 kanxue 发布
e_lfanew是一个指针,它指向PE头:
IMAGE_NT_HEADERS STRUCT
Signature DWORD ?
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>
........


谢谢坛主的热心,明白了.
2006-9-1 11:31
0
游客
登录 | 注册 方可回帖
返回
//