PE 格式的 DOS 标头中的“e_lfanew”是什么意思?

问题描述 投票:0回答:1

在 PE(Windows 可执行文件)格式的

IMAGE_DOS_HEADER
中,有一个称为
e_lfanew
的字段,它起着非常重要的作用,因为它指向实际的 PE 标头数据。

我的问题是,“e_lfanew”实际上代表什么?这是什么意思?真是太神秘了

不是问它做什么,我知道它做什么,我想知道

e_lfanew
中的字母实际上代表什么,为什么给它起这个名字?

windows portable-executable
1个回答
24
投票

我的解释是,它是 New Executable 标头的 l逻辑 file a地址。

主要基于这个P/Invoke C#定义中IMAGE_DOS_HEADER结构体的注释:

public Int32 e_lfanew;      // File address of new exe header

还有@Hans Passant的评论:

e_
前缀有助于处理旧的K&R编译器,这些编译器尚未将结构成员保留在自己的符号表中。

稍后由 @Simon Kissane 发表评论:

IMAGE_DOS_HEADER
内有两个以
e_lfa
开头的字段:

  • WORD   e_lfarlc; // File address of relocation table
  • LONG   e_lfanew; // File address of new exe header

“lfa”似乎意味着“逻辑文件地址”,表示相对于可执行文件开头的偏移量。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.