This course will familiarize students with all aspects of writing Assembly code on the ARM platforms. By the end of this course students will be able to understand and write Assembly programs on the ARM platform. This includes being able to understand programs that were created by a high level language compiler. This course is fundamental for anyone wishing to do reverse engineering on the ARM platforms. The BeagleBone family of boards is used in this course.
A non-exhaustive list of topics to be covered includes:
- ARM overview
- History
- Families
- RISC not CISC
- Configurable endianness
- Features
- Lots of registers
- Fixed width instructions
- Load and store architecture
- 8 privilege modes (rings)
- Conditional execution (reduces branching)
- Barrel shifter (allows combining operations)
- Thumb vs. ARM mode
- ARM mode has 32-bit wide instructions
- Thumb mode has 16-bit wide instructions
- Thumb-2 mode has both 16 and 32 bit wide instructions
- Conditional execution in Thumb mode requires IT command
- Data types
- Byte (8-bit)
- Half word (16-bit)
- Word (32-bit)
- Double word (64-bit)
- Registers
- 16 general purpose 32-bit registers (R0…R15)
- R13 used as stack pointer (SP)
- R14 used as link register (LR) for function return address
- R15 used as program counter (PC) like IP but 2 instructions ahead
- Current program status register (CPSR)
- Coprocessors
- 16 defined by ARM architecture
- Varying functions
- Math
- Graphics
- Each coprocessor has 16 registers
- Access is only via:
- MCR (write)
- MRC (read)
- Instructions
- Load/store
- Push/pop
- Doing math
- Defining and calling functions
- Branching
- Conditional instructions
- Miscelaneous and next steps