Introduction to ARM
Creator: Gananand Kini
License: Creative Commons: Attribution, Share-Alike
(http://creativecommons.org/licenses/by-sa/3.0/)
Class Prerequisites: Must have a basic understanding of the C programming language. It is highly recommended that you have taken the Intro x86 and Intermediate x86 classes, so that you can compare and contrast ARM and x86 assembly and architectures.
Lab Requirements:
- VM md5: 41a1c3aa1e187f7490a63dc333426980
-The VM for the class is available direct or via .torrent from archive.org. It is also available for direct download from this site here.
-Username/pass = OpenSecurity/password
-Class material is in ~/Downloads
-The VM .zip size is about 1.5GB and decompressed is about 4.5GB.
- To create your own VM you can follow these instructions (.docx, .pdf) by Jeff Tam or these instructions (external link) by Vitaly Osipov.
(Special thanks to Jeff Tam for recreating the VM after the original was corrupted.)
Class Textbook: “ARM System Developer's Guide: Designing and Optimizing System Software” by Andrew N. Sloss, Dominic Symes, and Chris Wright
Recommended Class Duration: 2 days
Creator Available to Teach In-Person Classes: Yes
Creator Comments:
ARM processors are becoming ubiquitous in mobile devices today with RISC processors making a comeback for their applications in low power computing environments. With major operating systems choosing to run on these processors including the latest Windows RT, iOS and Android, understanding the low level operations of these processors can serve to better understand, optimize and debug software stacks running on them. This class builds on the Intro to x86 class and tries to provide parallels and differences between the two processor architectures wherever possible while focusing on the ARM instruction set, some of the ARM processor features, and how software works and runs on the ARM processor.
In order to demonstrate these features, labs are made available as part of a virtual environment with an ARM emulator run using QEMU. These labs include:
- A simple fibonacci sequence generator in assembly that demonstrates use of recursion with the use of control flow instructions such as bl, beq, the cmp instruction, arithmetic operations such as add, subs and finally stack operation using push and pop.
- An ARM version of the CMU Bomb Lab from CMU's Introduction to Computer Systems class that demonstrates the use of the GNU Debugger for reverse engineering binaries on the ARM platform.
- A simple Interrupts lab that demonstrates the implementation of an emulated irq interrupt handler in QEMU where we take keyboard input and add 1 to the character and then output it.
- A control flow hijack lab where we perform the same hijack demonstrated by Itzhak Avraham at Blackhat in 2012 using Return-Oriented-Programming (ROP) in the ARM emulator
- An Atomic instructions lab where we implement a sample mutex in conjunction with an application using threading to emulate atomic instructions that are included with the ARM instruction set.
Intro x86 is a pre-requisite to this class and will help in understand the similarities and differences between the two architectures as well as understand some of the basic program operations that work similarly on both platforms.
To submit any suggestions, corrections, or explanations of things I didn’t know the reasons for, please email me at the address above.
Class Materials
Day 1 Part 1 (50:46, 504 MB)
Day 1 Part 2 (39:32, 384 MB)
Day 1 Part 3 (41:28, 357 MB)
Day 1 Part 4 (1:07:55, 648 MB)
Day 1 Part 5 (16:22, 149 MB)
Day 2 Part 1 (49:02, 418 MB)
Day 2 Part 2 (15:23, 174 MB)
Day 2 Part 3 (26:36, 236 MB)
Day 2 Part 4 (37:21, 322 MB)
Day 2 Part 5 (27:56, 237 MB)
(6:12:26 total, sans lab time)
The videos are useful for students, but also more useful for potential instructors who would like to teach this material. By watching the video, you will better understand the intent of some slides which do not stand on their own. You are recommended to watch the largest size video so that the most possible text is visible without having to follow along in the slides.
Revision History:
7-5-2012 - Uploaded official VM recreation instructions and missing lab code
11-25-2012 - Initial class content upload, including 2 days of videos
If you have used and modified this material, we would appreciate it if you submit your modified version for publishing here, so that all versions can benefit from your changes.