MSIL汇编程序工具(Ilasm.exe)使用详解

来源:互联网  作者:本站整理
摘要:MSIL汇编程序从Microsoft中间语言(MSIL)生成可移植可执行的(PE)文件。可以运行结果可执行文件(该文件包含MSIL和所需的元数据)以确定MSIL是否按预期执行。…

/mdv=versionString
 设置元数据版本字符串。
.NET Framework 2.0 版的新增功能。

/msv=major.minor
 设置元数据流版本,其中 major 和 minor 都是整数。
.NET Framework 2.0 版的新增功能。

/noautoinherit
 当未指定基类时,禁用从 Object 的默认继承。
.NET Framework 2.0 版的新增功能。

/nocorstub
 取消生成 CORExeMain 存根。
.NET Framework 2.0 版的新增功能。

/nologo
 取消显示 Microsoft 启动标题。

/output: file.ext
 指定输出文件名和扩展名。默认情况下,输出文件名与第一个源文件名相同。默认扩展名为 .exe。如果指定 /dll 选项,则默认扩展名为 .dll。
注意
指定 /output:myfile.dll 并不会设置 /dll 选项。如果不指定 /dll,则会生成名为 myfile.dll 的可执行文件。

/optimize
 将长指令优化为短指令。例如,将 br 优化为 br.s。
.NET Framework 2.0 版的新增功能。

/pe64
 创建 64 位映像 (PE32+)。
如果未指定目标处理器,则默认值为 /itanium。
.NET Framework 2.0 版的新增功能。

/pdb
 创建 PDB 文件但不启用调试信息跟踪。
.NET Framework 2.0 版的新增功能。

/quiet
 指定安静模式;不报告程序集进度。

/resource: file.res
 在生成的 .exe 或 .dll 文件中包括 *.res 格式的指定资源文件。使用 /resource 选项只能指定一个 .res 文件。

/stack=stackSize
 将 NT Optional 标头中的 SizeOfStackReserve 值设置为 stackSize。
.NET Framework 2.0 版的新增功能。

/stripreloc
 指定不需要基重定位。
.NET Framework 2.0 版的新增功能。

/subsystem= integer
 将 subsystem 设置为由 NT Optional 标题中的 integer 指定的值。如果在文件中指定了 .subsystem IL 指令,则此命令将重写它。有关 integer 的有效值的列表,请参见 winnt.h 中的 IMAGE_SUBSYSTEM。

/x64
 指定 64 位 AMD 处理器作为目标处理器。
如果未指定映像位元,则默认值为 /pe64。
.NET Framework 2.0 版的新增功能。

/?
 显示该工具的命令语法和选项。

注意
Ilasm.exe 的所有选项都不区分大小写,并且根据前三个字母识别。例如,/lis 等效于 /listing 而 /res:myresfile.res 等效于 /resource:myresfile.res。指定参数的选项接受用冒号 (:) 或等号 (=) 作为选项和参数之间的分隔符。例如,/output:file.ext 等效于 /output=file.ext。

备注说明

MSIL 汇编程序有助于工具供应商设计和实现 MSIL 生成器。通过使用 Ilasm.exe,工具和编译器开发人员可以专注于生成 MSIL 和元数据,而无需考虑以 PE 文件格式发出 MSIL。

与面向运行库的其他编译器(如 C# 和 Visual Basic)类似,Ilasm.exe 不产生中间对象文件,并且不需要链接阶段即可形成 PE 文件。

MSIL 汇编程序可以表达以运行库为目标的编程语言的所有现有元数据和 MSIL 功能。这使得用上面任何编程语言编写的托管代码都可以在 MSIL 汇编程序中充分表达并且可以用 Ilasm.exe 编译。

可以将 Ilasm.exe 同它的伙伴工具 Ildasm.exe 一起使用。Ildasm.exe 采用包含 MSIL 代码的 PE 文件并创建相应的文本文件作为 Ilasm.exe 的输入。这很有用,例如当编译用并非支持所有运行库元数据属性的编程语言编写的代码时。通过 Ildasm.exe 编译该代码并运行输出后,可以手动编辑结果 MSIL 文本文件以添加缺少的属性。然后可以通过 Ilasm.exe 运行此文本文件以生成最终的可执行文件。

也可以使用此方法从最初由不同的编译器生成的数个 PE 文件生成一个 PE 文件。

注意
目前,无法对包含嵌入的本机代码的 PE 文件(例如,由 Visual C++ 生成的 PE 文件)使用此技术。

为使 Ildasm.exe 和 Ilasm.exe 的这种组合使用尽可能准确,此汇编程序不执行某些简单的优化,即不推断是使用短格式指令还是使用长格式指令。例如,此工具不会尝试确定它是否可以用短编码替换长编码,这些长编码可能是在 MSIL 源中编写的,也可能是由其他编译器发出的。如果需要短编码,则必须显式编写该格式。但是,此汇编程序在可能的情况下,还是会检查是否有超出范围的条件。

注意
Ildasm.exe 只对磁盘上的文件进行操作。它不对安装在全局程序集缓存中的文件进行操作。

有关 MSIL 的语法的更多信息,请参见 .NET Framework SDK 中的 asmparse.grammar 文件。

【相关文章】好搜一下
小方法大作用:如何让网站PR值一路高歌

小方法大作用:如何让网站PR值一路高歌

做网站最痛苦的就是建站之初的那段时间,如长沙厂房出租网站刚建立,只是处于婴幼儿时…