【问题标题】:riscv objdump how to set to print x0-x31 register names instead of abi namesriscv objdump如何设置打印x0-x31寄存器名称而不是abi名称
【发布时间】:2019-07-09 20:31:20
【问题描述】:

我正在尝试使用 riscv64-unknown-elf-objdump 反汇编 risc-v 二进制文件,并且我想获得在硬件中看到的寄存器名称(如 x0-x31),而不是在 abi 中(sp,s0 , 一个..)。

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

【问题讨论】:

  • 根据 binutils 源代码,-Mnumeric 应该可以工作。 objdump --help 也应该打印 "numeric 打印数字寄存器名称,而不是 ABI 名称。"
  • @jester 谢谢!这正是我所需要的

标签: assembly disassembly cpu-registers riscv objdump


【解决方案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

【讨论】:

    【解决方案2】:
    --- 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;
     }
    

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 2022-06-15
      • 2021-08-10
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 2014-03-14
      • 2013-07-12
      • 1970-01-01
      相关资源
      最近更新 更多