我是MASM的新手。所以这些问题可能非常基础。
当我使用MASM汇编程序时,有一个名为“链接映射”的输出文件。其内容由各个段的起始偏移量和长度组成,如数据段,代码段和堆栈段。我想知道,这些信息在哪里描述?他们是在谈论各个细分市场如何在EXE文件中 ,或者在程序加载器将EXE文件加载到内存后,细分如何位于内存中?
顺便说一句:“假设”指令有什么作用?我的理解是它告诉汇编程序将一些信息发送到exe文件头,以便程序加载程序可以使用它来相应地设置DS,CS,SS,ES寄存器。我是对的吗?
提前致谢。
答案 0 :(得分:1)
这不是特定于MASM的。它是链接器的一部分。即。
ml /Fm foo.asm
与
相同ml foo.asm /link /map
或
ml /c foo.asm
link foo.obj /map
cl.exe
也有这个选项(/Fm
)也可以做同样的事情。
它是按照它们出现的顺序放置在EXE或DLL图像中的部分的列表。例如。代码,数据,资源,导入表,导出表等
偏移量相对于图像部分的开头。链接器可以将许多对象部分组合成图像部分。
E.g。
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
部分)的起点。
提供编译时检查,以防止意外滥用寄存器。它不会生成任何代码。见