llvm-mc - LLVM 机器代码 Playground¶
概要¶
llvm-mc [选项] [文件名]
描述¶
llvm-mc 命令接受指定架构的汇编代码作为输入,并生成目标文件或可执行文件。
llvm-mc 提供了一组用于处理机器代码的工具,例如编码指令和显示内部表示,将字符串反汇编为字节等等。
输出汇编代码的架构选择是根据输入文件自动确定的,除非使用 --arch
选项来覆盖默认值。
选项¶
如果省略 -o
选项,则如果输入来自标准输入,llvm-mc 将将其输出发送到标准输出。如果 -o
选项指定 “-
”,则输出也将被发送到标准输出。
如果未指定 -o
选项,并且指定了除 “-
” 以外的输入文件,则 llvm-mc 通过获取输入文件名,删除任何现有的 .s
扩展名,并添加 .o
后缀来创建输出文件名。
下面描述了其他 llvm-mc 选项。
终端用户选项¶
- --help¶
显示可用选项(–help-hidden 获取更多信息)。
- -o <filename>¶
使用
<filename>
作为输出文件名。有关更多详细信息,请参见上面的摘要。
- --arch=<string>¶
要汇编的目标架构,请参阅 -version 以获取可用目标。
- --as-lex¶
应用汇编器的 “lexer” 将输入分解为 token 并打印每个 token。这旨在帮助开发和测试汇编器实现。
- --assemble¶
汇编汇编文件(默认),并将结果打印到汇编代码。这对于设计和测试指令解析器很有用,并且当与其他 llvm-mc 标志结合使用时可能是一个有用的工具。例如,此选项可能用于转码来自不同方言的汇编代码,例如在 Intel 上,您可以使用 -output-asm-variant=1 从 AT&T 语法转换为 Intel 汇编语法。它也可以与 –show-encoding 结合使用,以了解指令是如何编码的。
- --disassemble¶
解析一系列十六进制字节,并将结果打印为汇编语法。
- --mdis¶
标记十六进制字节字符串的反汇编。
- --cdis¶
彩色十六进制字节字符串的反汇编。
- --filetype=[asm,null,obj]¶
设置输出文件类型。将此标志设置为 asm 将使工具输出文本汇编代码。将此标志设置为 obj 将使工具输出目标文件。将其设置为 null 会导致不创建任何输出,并且可用于计时目的。默认值为 asm。
- -g¶
为汇编源文件生成 DWARF 调试信息。
- --hex¶
将原始十六进制字节作为反汇编的输入。空格将被忽略。
- --large-code-model¶
创建 CFI 指令,假设代码可能超过 2 GB。
- --main-file-name=<string>¶
指定我们应将输入文件视为的名称。
- --masm-hexfloats¶
启用 MASM 样式的十六进制浮点初始值设定项 (3F800000r)。
- --mcpu=<cpu-name>¶
目标特定 CPU 类型(-mcpu=help 获取详细信息)。
- --triple=<string>¶
要汇编的目标三元组,请参阅 -version 以获取可用目标。
- --split-dwarf-file=<filename>¶
DWO 输出文件名。
- --show-inst-operands¶
显示已解析的指令操作数。
- --show-inst¶
显示内部指令表示。
- --show-encoding¶
显示指令编码。
- --save-temp-labels¶
不要丢弃临时标签。
- --relax-relocations¶
发出 R_X86_64_GOTPCRELX 而不是 R_X86_64_GOTPCREL。
- --print-imm-hex¶
对于立即数值,首选十六进制格式。
- --preserve-comments¶
在输出的汇编代码中保留注释。
- --output-asm-variant=<uint>¶
用于输出打印的语法变体。例如,在 x86 目标上,–output-asm-variant=0 以 AT&T 语法打印,而 –output-asm-variant=1 以 Intel/MASM 语法打印。
- --compress-debug-sections=[none|zlib|zstd]¶
选择 DWARF 调试 sections 压缩。
退出状态¶
如果 llvm-mc 成功,它将以 0 退出。否则,如果发生错误,它将以非零值退出。