felsweg / learn-arm-v8-qemu

learn arm v8 assembly using qemu and docker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ARMv8 using Qemu and GDB

This repo contains information, small examples, build scripts to support the aspiring learner in his undertaking of understanding arm v8 assembly.

Prerequisites

You need docker, gdb-multiarch and make installed.

install via

apt install -y make gdb-multiarch

and docker, if not already installed:

curl -fsSL https://get.docker.com | sh

Quickstart

This repository contains a script to get everything setup properly. Run ./config.sh to get started.

To compile everything

make

this will use an image called qemu, which will be created using the config script

Visual Code Remote GDB Setup

This configuration can be used for remote debugging. Put it in .vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach Debug to Qemu",
            "type": "gdb",
            "request": "attach",
            "gdbpath": "/usr/bin/gdb-multiarch",
            "executable": "${workspaceFolder}/target/kernel.elf",
            "target": "localhost:8887",
            "remote": true,
            "cwd": "${workspaceRoot}",
            "valuesFormatting": "parseText",
            "preLaunchTask": "launch",
            "postDebugTask": "stop"
        }
    ]
}

additionally, we also need a tasks.json as well

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command" : "make"
        },
        {
            "label": "launch",
            "dependsOn" : "build",
            "command" : "./launch.sh"
        },
        {
            "label": "stop",
            "command" : "./stop.sh"
        }
    ]
}

NOTE: This repo already contains these scripts.

To debug the main assembly file ( main.s ) you should have Native Debug for Visual Code installed. Pressing F5 will build the program, and start qemu with a gdb server run. Ending the debug session will clean up the running container.

Debugging

Visual Code does not have a register or memory view yet. However it is possible to obtain information from the registers by typing info registers in the debug console during a debug sessions.

Updates

Date (DD/MM/YYYY) Description
14/11/2010 Split development to two branches:
master-armv8 for aarch64
master-armv7 for arm-v7 / arm32 development

Qemu will use
cortex-a57 and
cortex-a15
for aarch64 and arm32 respectively

Resources / References

  1. Azeria Labs - https://azeria-labs.com/writing-arm-assembly-part-1/
  2. Armv8 Programmers Guide

About

learn arm v8 assembly using qemu and docker


Languages

Language:Shell 50.0%Language:Makefile 25.1%Language:Assembly 17.7%Language:Dockerfile 7.3%