From 359a92f770e621828e628f319290bb5736b1f67b Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 9 Feb 2020 10:24:03 +0530 Subject: new styles, new post! --- docs/posts/call_to_ARMs/index.html | 131 +++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 docs/posts/call_to_ARMs/index.html (limited to 'docs/posts/call_to_ARMs') diff --git a/docs/posts/call_to_ARMs/index.html b/docs/posts/call_to_ARMs/index.html new file mode 100644 index 0000000..4085a90 --- /dev/null +++ b/docs/posts/call_to_ARMs/index.html @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + Call To ARMs - peppe.rs + +
+
+ ⟵ Back + View Raw +
+
+ 09/02 — 2020 +
+ + 33.57 + + cm +   + + 2.2 + + min +
+
+ + Call To ARMs + +
+

My 4th semester involves ARM programming. And proprietary +tooling (Keil C). But we don't do that here.

+ +

Building

+ +

Assembling and linking ARM binaries on non-ARM architecture +devices is fairly trivial. I went along with the GNU cross +bare metal toolchain binutils, which provides arm-as and +arm-ld (among a bunch of other utils that I don't care +about for now).

+ +

Assemble .s files with:

+ +
arm-none-eabi-as main.s -g -march=armv8.1-a -o main.out
+
+ +

The -g flag generates extra debugging information that +gdb picks up. The -march option establishes target +architecture.

+ +

Link .o files with:

+ +
arm-none-eabi-ld main.out -o main
+
+ +

Running (and Debugging)

+ +

Things get interesting here. gdb on your x86 machine +cannot read nor execute binaries compiled for ARM. So, we +simulate an ARM processor using qemu. Now qemu allows you +to run gdbserver on startup. Connecting our local gdb +instance to gdbserver gives us a view into the program’s +execution. Easy!

+ +

Run qemu, with gdbserver on port 1234, with our ARM +binary, main:

+ +
qemu-arm -singlestep -g 1234 main
+
+ +

Start up gdb on your machine, and connect to qemu’s +gdbserver:

+ +
(gdb) set architecture armv8-a
+(gdb) target remote localhost:1234
+(gdb) file main
+Reading symbols from main...  # yay!
+
+ +

GDB Enhanced

+ +

gdb is cool, but it's not nearly as comfortable as well +fleshed out emulators/IDEs like Keil. Watching registers, +CPSR and memory chunks update is pretty fun.

+ +

I came across gdb's TUI mode (hit C-x C-a or type tui +enable at the prompt). TUI mode is a godsend. It highlights +the current line of execution, shows you disassembly +outputs, updated registers, active breakpoints and more.

+ +

But, it is an absolute eyesore.

+ +

Say hello to GEF! “GDB +Enhanced Features” teaches our old dog some cool new tricks. +Here are some additions that made my ARM debugging +experience loads better:

+ +
    +
  • Memory watches
  • +
  • Register watches, with up to 7 levels of deref (overkill, +I agree)
  • +
  • Stack tracing
  • +
+ +

And its pretty! See for yourself:

+ +

gef.png

+ +

Editing

+ +

Vim, with syntax off because it +dosen't handle GNU ARM syntax too well.

+ +
+
+ ⟵ Back + View Raw +
+
+ + -- cgit v1.2.3