assembly - GNU AS 中的标签在反汇编中的行为与 GCC 代码不同
问题描述
当我使用标签编写自定义汇编代码时,反汇编真的很难阅读,因为它为每个标签启动了一个新块,例如以下代码:
lui t2, %hi(_edata)
addi t2, t2, %lo(_edata)
.copy_loop:
bgeu t1, t2, .copy_end
lw t3, 0(t0)
sw t3, 0(t1)
addi t0, t0, 4
addi t1, t1, 4
j .copy_loop
.copy_end:
变成以下混乱objdump
:
168: 00030313 mv t1,t1
16c: 000033b7 lui t2,0x3
170: 01838393 addi t2,t2,24 # 3018 <_edata>
00000174 <.copy_loop>:
174: /-> 00737c63 bgeu t1,t2,18c <.copy_end>
178: | 0002ae03 lw t3,0(t0)
17c: | 01c32023 sw t3,0(t1)
180: | 00428293 addi t0,t0,4
184: | 00430313 addi t1,t1,4
188: \-- fedff06f j 174 <.copy_loop>
0000018c <.copy_end>:
18c: 000032b7 lui t0,0x3
190: 02028293 addi t0,t0,32 # 3020 <_irq_reg_save>
但是当我反汇编由 GCC 生成的 C 代码时,标签并没有像那样“分离”,并且跳转箭头被正确绘制:
470: 01076713 ori a4,a4,16
474: 00e7a023 sw a4,0(a5)
478: /-- 01c0006f j 494 <lcd_puts+0x4c>
47c: /--|-> fec42783 lw a5,-20(s0)
480: | | 00178713 addi a4,a5,1
484: | | fee42623 sw a4,-20(s0)
488: | | 0007c783 lbu a5,0(a5)
48c: | | 00078513 mv a0,a5
490: | | dfdff0ef jal ra,28c <lcd_write_raw>
494: | \-> fec42783 lw a5,-20(s0)
498: | 0007c783 lbu a5,0(a5)
49c: \----- fe0790e3 bnez a5,47c <lcd_puts+0x34>
4a0: 00000013 nop
4a4: 00000013 nop
在 GNU AS 中编写自定义汇编代码时,有没有办法获得相同的结果?我用错了标签吗?
解决方案
推荐阅读
- python - Python 2 中的 256 AES 加密
- powershell - Powershell $MyInvocation.MyCommand.Path 在 exe 中转换脚本时返回 null
- django - Django - 如何设置 2 个具有相同字段的模型?
- python - 在 python 中,startswith() 解析大文本文件的问题
- python - 从子硬盘驱动器读取图像以进行张量流
- java - Java中二维列表中的短路径
- unity3d - 使用来自主场景的信息测试场景
- curl - axios:在axios中传递curl的-d
- delphi - 对于delphi,mod和case不能一起工作
- arrays - 删除矩阵中的零并减小大小