Assembly Programming (x86) with NASMNEW!
Have you ever found yourself browsing to Wikipedia to learn something about a subject and several hours later you are still at Wikipedia, but learning about something much more fundamental that makes up the foundation of the original subject that you were initially researching? Are you someone who loves learning and just needs
to know how things "tick"? Are you fascinated by how a CPU processor or computer memory works? Do the fields of reverse engineering
, exploit writing
and vulnerability analysis
, malware analysis
, or even programming
sound interesting to you?
This course introduces the student to the world of Assembly programming with the Netwide Assembler
, NASM. To develop a strong background in Assembly can benefit anyone who is interested in reverse engineering, writing and exploring exploits, malware analysis, or interacting directly with the Linux kernel while programming.
Assembly programming is not for the faint-of-heart and is not recommended as a first
computer language to learn. It takes a lot of pre-requisite learning of how processors and memory management works before even writing your first piece of code. This course, brings a culmination of different sources including hands-on experience together and explains, in depth, how your computer works and how to begin programming in assembly for the Netwide Assembler in Linux. The course material consists of different media types, such as text, images and videos.
Download Course Information (PDF)
- The Course - in the form of a privately developed wiki - contains the following:
- Course exercises. All exercises linked to the Main Page of the wiki for easy access.
- Highlighted and linked important terms.
- Syntax highlighting and all code examples copyable to the clipboard, without the line numbers.
- Roulette Fashion testing and learning - Use a random page link to test what you have learned.
- Instructional videos - (13 Videos / 2 hours, 17 minutes, 55 seconds) to watch hands on experience.
- Several Sets of Flash Cards for studying
- Screen shots and images - to help visualize the knowledge.
- Access to the course-specific Linux ISO developed and tested for VM environments, such as Oracle's VirtualBox.
- Help! - Got any questions or having any trouble? Email me personally, I will do my best to resolve them as quickly as possible
Some Included Course Topics
- Configuration for Linux and Vim for NASM-specific assembly programming
- Configuring Vim for NASM (Video)
- Development Cycle
- Git and GitHUB.com for Developing Software (Video)
- General Computing and Computer Science
- Number Systems
- Assembler and Linker
- CPU Registers (Video)
- Memory Management
- Virtual Address Space
- Memory Segmentation (Video)
- The Stack and the Pointer
- CPU Instructions
- Anatomy of a CPU Instruction
- Pseudo Instructions
- Programming Lessons
- Hello World! (Video)
- Makefile Syntax (Video)
- Defining Custom Functions (Video)
- Simple Arithmetic
- Program Arguments
- User Input (Video)
- Bitwise Operators
- Odd or Even Input (Video)
- If/Else Logic and Jumps
- External C Library Functions
- Stack Frames - Function Prologues and Epilogues
- Advanced Input and Arithmetic
- Hardware, Linux, and Assembly
- Debugging Applications (Video)
- Debugging Symbols
- Stepping through applications
- NOP Sled
- Shellcode Payload
- Bypassing Kernel Protection
- Setting Up GDB
- Buffer Overflow (Video)
The requirements for this course are outlined in the list below. These will be used throughout the course, but can be substituted in some cases with similar software that you are already proficient with.
- Modern Web browser - Google Chrome and Firefox recommended for viewing course materials.
- A printer - to print the flash cards (optional but recommended)
- Dedicated installation of Linux, or virtual machine software, such as Oracle's VirtualBox.
- Linux - Weakerthan Linux 6 - this Debian-based live DVD ISO has all of the prerequisite software installed and can be installed to a disk easily.
- Some understanding of simple programming concepts, such as logical constructs, loops, and experience with higher level language syntax, such as Python, C, or Java is recommended but not required.
The registration fee for Assembly Programming with NASM is $25.00USD
. This is a server-lifetime* subscription in which you may access all course content for a total of six months on our servers. An HTML5 compatible browser is required to properly view the course material.
* - The term "server-lifetime" implies that you will have access for the duration the server and serv-side software (hosting) is available. If funds run out, the server gets compromised, or I am hurt, killed, or debilitated in any way which hinders my ability to continue, the online academy will remain availbale until my host cancels my service.