PE格式的DOS标题中的"e_lfanew"是什么意思?

hor*_*guy 6 windows portable-executable

IMAGE_DOS_HEADERPE(Windows可执行文件)格式中有一个称为的字段e_lfanew,它起着非常重要的作用,因为它指向实际的PE头数据.

我的问题是,"e_lfanew"实际上代表什么?这是什么意思?它太神秘了.

编辑:我不是在问它做了什么,我知道它做了什么,我想知道这些字母e_lfanew实际上代表什么,为什么给它这个名字?

Cod*_*ter 12

我的解释是,这是该˚F ILE ddress为可执行文件头.

主要基于此P/Invoke文章中关于IMAGE_DOS_HEADER的评论:

public Int32 e_lfanew;      // File address of new exe header
Run Code Online (Sandbox Code Playgroud)

"长",因为它来自16位时代,可变大小为32位.

  • 这是一个很好的猜测,但我不认为“长”部分是正确的。在`IMAGE_DOS_HEADER`里面有两个以`e_lfa`开头的字段:`WORD e_lfarlc; // 重定位表的文件地址`和`LONG e_lfanew; // 新的exe头的文件地址`. `e_lfanew` 是一个 `LONG` (32 位),但 `e_lfarlc` 是一个 `WORD`(16 位,一个 `short`)。显然“fa”的意思是“文件地址”,但我怀疑“l”是否代表“长”。我相信“lfa”实际上是“逻辑文件地址”,这是距文件开头的偏移量的旧术语。在现代PE格式中,同样的想法称为RVA(相对虚拟地址) (2认同)