riscv objdump如何设置打印x0-x31寄存器名称而不是abi名称

时间:2019-07-09 20:31:20

标签: assembly disassembly cpu-registers riscv objdump

我正在尝试使用riscv64-unknown-elf-objdump分解risc-v二进制文件,并且我想获得寄存器名称,如硬件(如x0-x31)所示,而不是像abi(sp,s0) ,a ..)。

objdump手册对于RISC-V似乎没有这样的选择。实际上,该手册似乎没有与RISC-V有关的任何信息。 ARM有-M reg-names-raw,有人知道这样的标记是否可用吗?

riscv64-unknown-elf-objdump -M"no-aliases" -M"gpr-names-raw" -d hello ->返回
0:riscv64-unknown-elf-objdump:无法识别的反汇编程序选项:gpr-names-raw 不能识别gpr-names-raw或reg-names = ARCH

我想要这样的东西:

addi    x1,x1,-32
sw      x2,28(x3)
addi    x5,x5,32

代替此

addi    sp,sp,-32
sw      s0,28(sp)
addi    s0,sp,32

2 个答案:

答案 0 :(得分:1)

支持使用以下特定于RISC-V的反汇编程序选项 使用-M开关(多个选项应用逗号分隔):

numeric       Print numeric register names, rather than ABI names.

no-aliases    Disassemble only into canonical instructions, rather
              than into pseudoinstructions.

(GNU objdump 2.33.1 --help

示例调用:

$ riscv64-unknown-elf-objdump -d num.o -M numeric

num.o:     file format elf32-littleriscv


Disassembly of section .text:

00000000 <.text>:
   0:   fe010113            addi    x2,x2,-32
   4:   00812e23            sw  x8,28(x2)
   8:   02010413            addi    x8,x2,32

答案 1 :(得分:0)

--- binutils-patch/opcodes/riscv-dis.c
+++ binutils-patch/opcodes/riscv-dis.c
@@ -47,8 +47,8 @@
 static void
 set_default_riscv_dis_options (void)
 {
-  riscv_gpr_names = riscv_gpr_names_abi;
-  riscv_fpr_names = riscv_fpr_names_abi;
+  riscv_gpr_names = riscv_gpr_names_numeric;
+  riscv_fpr_names = riscv_fpr_names_numeric;
   no_aliases = 0;
 }