Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberry-pi-arm-assembly

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
raspberry-pi-arm-assembly [2021/04/18 13:35] – angelegt bennyraspberry-pi-arm-assembly [2024/06/09 10:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 32: Zeile 32:
 </code> </code>
  
 +===== Debug mit gdb =====
  
 +Notizen für die Benutzung von gdb
 +
 +==== Breakpoint setzen ====
 +<code>
 +(gdb) break _start
 +Breakpoint 1 at 0x10074
 +</code>
 +
 +==== Programm ausführen ====
 +<code>
 +(gdb) run
 +Starting program: /home/pi/arm-assembly/002.elf 
 +
 +Breakpoint 1, 0x00010074 in _start ()
 +</code>
 +
 +==== Programm disassemblen ====
 +
 +<code>
 +(gdb) disass
 +Dump of assembler code for function _start:
 +=> 0x00010074 <+0>: mov r7, #4
 +   0x00010078 <+4>: mov r0, #1
 +   0x0001007c <+8>: ldr r1, [pc, #36] ; 0x100a8 <_start+52>
 +   0x00010080 <+12>: mov r2, #19
 +   0x00010084 <+16>: svc 0x00000000
 +   0x00010088 <+20>: mov r7, #3
 +   0x0001008c <+24>: mov r0, #0
 +   0x00010090 <+28>: ldr r1, [pc, #20] ; 0x100ac <_start+56>
 +   0x00010094 <+32>: mov r2, #1
 +   0x00010098 <+36>: svc 0x00000000
 +</code>
 +
 +==== Register ansehen ====
 +<code>
 +(gdb) info reg
 +r0             0x0                 0
 +r1             0x0                 0
 +r2             0x0                 0
 +r3             0x0                 0
 +r4             0x0                 0
 +r5             0x0                 0
 +r6             0x0                 0
 +r7             0x0                 0
 +r8             0x0                 0
 +r9             0x0                 0
 +r10            0x0                 0
 +r11            0x0                 0
 +r12            0x0                 0
 +sp             0xbefff360          0xbefff360
 +lr             0x0                 0
 +pc             0x10074             0x10074 <_start>
 +cpsr           0x10                16
 +fpscr          0x0                 0
 +</code>
 +
 +==== Nächste Instruktion ====
 +<code>
 +(gdb) ni
 +0x0001007c in _start ()
 +(gdb)  
 +</code>
 +
 +==== gdbserver und remote====
 +Ich hatte in einigen Fällen STDOUT nicht in der gdb-cmd-Ausgabe (zumindes nicht, wie ich es erwartet hatte). In solchen Fällen hilft es das Programm über gdbserver zu starten
 +<code>
 +gdbserver 127.0.0.1:12345 003.elf aaaabbb
 +Listening on port 12345
 +Remote debugging from host 127.0.0.1
 +aaaabbb
 +</code>
 +Nun steuert man das Programm remote via
 +<code>
 +gdb
 +target remote :12345
 +break _start
 +cont
 +
 +</code>
 +
 +==== Umfangreichere gdb-Ansicht ====
 +Mein Favorit ist "lay regs" da es die Register, den disassembled Code und die Command-Box zeigt.
 +<code>
 +(gdb) lay regs
 +</code>
 +Wer dies gern nutzt, sollte es in der ~/.gdbinit hinterlegen.
 +Mit "focus cmd" funktioniert dann der "Pfeil nach oben" auch wieder. Wer im ASM-Code navigieren möchte, setzt den "focus asm" oder "focus prev".
 +
 +==== Speicher an einer bestimmten Stelle/Adresse inspizieren ====
 +<code>
 +(gdb) x/s 0x200db
 +0x200db:        "A\021"
 +</code>
 +
 +==== Verschiedene Ausgaben ====
 +
 +<code>
 +(gdb) p/d 0xA # hex to dec
 +$1 = 10
 +(gdb) p/t 0xA # hex to bin
 +$2 = 1010
 +(gdb) p/t 0x4 # dec to bin
 +$3 = 100
 +(gdb) p/x 10 # dec to hex
 +$4 = 0xa
 +</code>
 +
 +===== objdump =====
 +
 +==== objdump -d ====
 +<code>
 +objdump -d <file> # oder -D
 +</code>
 +
 +==== objdump -x ====
 +<code>
 +objdump -x <file>
 +</code>
 +
 +
 +===== strace =====
 +==== Details zu strace ====
 +<code>
 +strace ./002.elf 
 +execve("./002.elf", ["./002.elf"], 0xbe85f3a0 /* 44 vars */) = 0
 +write(1, "Enter a character: ", 19Enter a character: )     = 19
 +read(0, Benny
 +"Benny\n", 8)                   = 6
 +write(1, "Benny\n", 6Benny
 +)                  = 6
 +exit(65)                                = ?
 ++++ exited with 65 +++
 +</code>
  
raspberry-pi-arm-assembly.1618752914.txt.gz · Zuletzt geändert: 2024/06/09 10:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki