如何检测 LE(线性可执行文件)文件的体系结构?

How to detect architecture of an LE (linear executable) file?

LE (linear executable) file 有什么指令集架构?链接的文章说:混合 16/32 位

  1. 是否意味着同一个 LE 文件可以包含 16 位和 32 位代码?
  2. 如何检测是否包含16位(8086)码?
  3. 如何检测它是否包含 32 位 (i386) 代码?

请注意,我知道可以区分 80286 和 i386 (80386) 的 CPU 类型 字段(参见 here)。但是,我将其解释为 CPU 类型要求,因此未指定体系结构,例如十六进制 40 在两者中均有效:它在 16 位代码中表示 inc ax,在 32 位代码中表示 inc eax,两者都可以由 80386 CPU.我对十六进制 40 在 LE 文件代码中的含义很感兴趣。

我找到了 https://www.program-transformation.org/Transform/PcExeFormat ,答案如下。

如果设置了对象 table 条目中的对象标志位 13,则它是 32 位的,否则它是 16 位的。

在executable入口table,LX包类型字节的LE标志位1区分16位和32位。

由于这些 table 中可以有多个条目,因此单个 LE 或 LX 文件可能同时包含 16 位和 32 位代码。