0
点赞
收藏
分享

微信扫一扫

RISC-V反汇编显示原始指令和寄存器编号


反汇编时添加 ​​-M no-aliases,numeric​​选项,输出原始指令和寄存器编号。

mingdu.zheng at gmail dot com

调用objdump反汇编,默认情况下,会将指令反汇编成伪指令或指令别名,会将寄存器反汇编成ABI寄存器名。用默认参数反汇编结果如下:

$ riscv64-unknown-elf-objdump -d hello.o

00000000 <main>:
0: 00000537 lui a0,0x0
4: 1141 addi sp,sp,-16
6: 00050513 mv a0,a0
a: c606 sw ra,12(sp)
c: 00000097 auipc ra,0x0
10: 000080e7 jalr ra
14: 40b2 lw ra,12(sp)
16: 4501 li a0,0
18: 0141 addi sp,sp,16
1a: 8082 ret

上面的输出不区分普通指令(32位指令)和压缩指令(16位指令),还有像​​ret​​​这样的伪指令,寄存器名称是​​a0​​​、​​sp​​​、​​ra​​等ABI名称。

添加 ​​-M no-aliases,numeric​​选项后反汇编结果如下:

$ riscv64-unknown-elf-objdump -d hello.o -M no-aliases,numeric

00000000 <main>:
0: 00000537 lui x10,0x0
4: 1141 c.addi x2,-16
6: 00050513 addi x10,x10,0 # 0 <main>
a: c606 c.swsp x1,12(x2)
c: 00000097 auipc x1,0x0
10: 000080e7 jalr x1,0(x1) # c <main+0xc>
14: 40b2 c.lwsp x1,12(x2)
16: 4501 c.li x10,0
18: 0141 c.addi x2,16
1a: 8082 c.jr x1

​no-aliases​​​选项要求输出原始指令,即指令集架构文档中的指令名称;​​numeric​​选项要求输出寄存器编号。

添加附加选项后,明确区分普通指令和压缩指令(​​c.​​​打头),寄存器名全部是​​x1​​​、​​x2​​​、​​x10​​了。


举报

相关推荐

0 条评论