簡體   English   中英

顯示寄存器的當前值。 (AArch64 Android 匯編調試)

[英]Show what's current value of registers. (AArch64 Android assembly debugging)

我想看看我的程序中所有寄存器內部發生了什么。

我有這段代碼在 AArch64 Linux 上作為靜態可執行文件運行良好。

.data

msg:
    .ascii "Hello World\n"
len = . - msg

.text

.globl _start
_start:
 mov x0, #0x1
 ldr x1, =msg
 ldr x2, =len
 mov x8, #0x40
 svc #0x0

 mov x0, #0x0
 mov x8, #0x5d
 svc #0x0

並使用此命令編譯並運行它(在 Android 上的 Termux 中)。

as hello.s -o hello.o
ld hello.o -o hello
./hello

與 8086 處理器應用程序 (emu8086) 的仿真不同,我可以一步一步地看到 CPU 如何在該仿真器內部獲取、解碼和執行,以及當前寄存器值以及當前內存值及其地址。

在這個真正的程序集(不是仿真)中,我什至看不到地址中的內存值是什么。

我正在考慮使用gdb 但我認為我需要示例如何使用它。

至少我想看看:

  • 所有寄存器的當前值。
  • 內存中程序地址的當前值。
  • 標志寄存器

到目前為止,我正在修補gdb

在這里我學到了什么

假設程序仍然和我的帖子一樣。

只需簡單地開始調試

gdb ./hello

然后它會顯示gdb解釋器

  • 添加斷點
b _start

它將添加斷點 1 然后如果需要再次添加

b *_start+4

它將添加斷點 2 等等,直到程序結束。

只需簡單地運行程序

run

它將運行斷點 1

好的,現在只是簡單地顯示當前內存值

x /5i _start

它將以指令格式顯示 _start 的前 5 個內存值。

0x4000b0 <_start>:
    mov x0, #0x1                        // #1
=> 0x4000b4 <_start+4>: ldr     x1, 0x4000d0 <_start+32>
   0x4000b8 <_start+8>: ldr     x2, 0x4000d8 <_start+40>
   0x4000bc <_start+12>:
    mov x8, #0x40                       // #64
   0x4000c0 <_start+16>:        svc     #0x0

=>標記表示當前斷點

要顯示當前寄存器,只需鍵入

i r

然后鍵入n執行下一個斷點。

好的,到目前為止,usig gdb 的負擔已經足夠了,我希望有一種最簡單的方法可以通過步驟 +4 將斷點從特定地址添加到結束地址。

另外我仍然沒有弄清楚如何查看標志寄存器。

我仍然期待gdb在一個顯示/屏幕中顯示當前寄存器值、當前內存值和當前標志寄存器值。 並且當我下一個斷點時,屏幕將自動更新,而且我希望它會從 _start、_start+4 等添加斷點.. 無需像上面那樣手動添加

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM