Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly arm elf gdb单步执行程序_Assembly_Gdb_Arm - Fatal编程技术网

Assembly arm elf gdb单步执行程序

Assembly arm elf gdb单步执行程序,assembly,gdb,arm,Assembly,Gdb,Arm,在我的学校实验室里,我被要求使用arm elf gdb一步一步地调试一个程序(用汇编编写)。当我在启动时设置一个断点,然后运行程序并逐步通过它来显示寄存器的当前值。但是,当我尝试单步执行时,调试器不会显示寄存器的值。我使用“I r”来显示寄存器的最终值,但我需要看到值一步一步地变化。知道调试器为什么不显示这些值吗 提前谢谢 汇编代码: .text @ Executable code below _start: .global _

在我的学校实验室里,我被要求使用arm elf gdb一步一步地调试一个程序(用汇编编写)。当我在启动时设置一个断点,然后运行程序并逐步通过它来显示寄存器的当前值。但是,当我尝试单步执行时,调试器不会显示寄存器的值。我使用“I r”来显示寄存器的最终值,但我需要看到值一步一步地变化。知道调试器为什么不显示这些值吗

提前谢谢

汇编代码:

        .text                          @ Executable code below

_start: .global _start                 @ "_start" is required by the linker
        .global main                   @ "main" is the main program

        b       main                   @ Start the main program

main:                                  @ Entry to function "main"

        mov     r0, #10
        mov     r1, #3
        add     r2, r1, r0             @ r2 = r1 + r0
        sub     r3, r0, r1             @ r3 = r1 - r0
        mul     r1, r0, r1             @ r1 = r0 * r1
        swi     0x11                   @ Software interrupt to terminate

        .end

您可以创建一个gdb宏,在每个步骤后显示寄存器:

(gdb) def z
Type commands for definition of "z".
End with a line saying just "end".
>si
>i r
>end
(gdb) z
r0             0x1  1
r1             0x69b6cae8   1773587176
r2             0x0  0
r3             0x69b6502c   1773555756
r4             0x620f14c0   1645155520
r5             0x68613870   1751201904
r6             0x0  0
r7             0x632aa214   1663738388
r8             0x699c5c50   1771854928
r9             0x632aa20c   1663738380
您可以使用gdb的命令。但您确实需要手动添加所有寄存器

display $r0
display $r1
...
您可以使用gdb启动脚本(-x参数)保存一些键入