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)。

-mattr=a1,+a2,-a3,...
目标 特定属性(-mattr=help 获取详细信息)。
--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 退出。否则,如果发生错误,它将以非零值退出。