我正在尝试使用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
答案 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;
}