在 PE(Windows 可执行文件)格式的
IMAGE_DOS_HEADER
中,有一个称为 e_lfanew
的字段,它起着非常重要的作用,因为它指向实际的 PE 标头数据。
我的问题是,“e_lfanew”实际上代表什么?这是什么意思?真是太神秘了
我不是问它做什么,我知道它做什么,我想知道
e_lfanew
中的字母实际上代表什么,为什么给它起这个名字?
我的解释是,它是 New Executable 标头的 l逻辑 file a地址。
主要基于这个P/Invoke C#定义中IMAGE_DOS_HEADER结构体的注释:
public Int32 e_lfanew; // File address of new exe header
还有@Hans Passant的评论:
前缀有助于处理旧的K&R编译器,这些编译器尚未将结构成员保留在自己的符号表中。e_
稍后由 @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”似乎意味着“逻辑文件地址”,表示相对于可执行文件开头的偏移量。