1

我是 MASM 的新手。所以这些问题可能非常基础。

当我使用 MASM 汇编器时,有一个名为“ Link Map ”的输出文件。它的内容由各个段的起始偏移量和长度组成,例如Data段、Code段和Stack段。我想知道,这些信息在哪里描述?他们是在谈论 EXE 文件中的各种段是如何定位,还是在程序加载器将 EXE 文件加载到内存中之后,段如何定位在内存中?

顺便说一句:“假设”指令有什么作用?我的理解是它告诉汇编器将一些信息发送到 exe 文件头中,以便程序加载器可以使用它来相应地设置 DS、CS、SS、ES 寄存器。我说得对吗?

提前致谢。

4

1 回答 1

1

链接器映射

这不是 MASM 特定的。它是链接器的一部分。IE

ml /Fm foo.asm

是相同的

ml foo.asm /link /map

或者

ml /c foo.asm
link foo.obj /map

cl.exe也有这个选项(/Fm),它做同样的事情。

它是按出现顺序放置在 EXE 或 DLL 映像中的部分的列表。例如代码、数据、资源、导入表、导出表等。

偏移量是相对于图像部分的开始的。链接器可以将多个对象部分组合成一个图像部分。

例如

 0002:00001514 00000014H .idata$2                DATA
 0002:00001528 00000014H .idata$3                DATA
 0002:0000153c 000000f8H .idata$4                DATA
 0002:00001634 00000464H .idata$6                DATA

以上是对象部分(它们来自.obj文件),因为它们包含以 . 开头的后缀$。链接器会将它们合并到.idata最终图像模块中的一个部分(按后缀的字典顺序)。偏移量相对于链接器将分配导入地址表(.idata节)的起始位置。

认为

提供编译时检查,以防止意外滥用寄存器。它不会生成任何代码。看

于 2010-04-04T03:41:27.370 回答