Skip to content

ansalens/x86_asm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

x86 Assembly

Context

Learning goals

  • Learn to write x86 assembly.
  • Learn to read x86 assembly.
  • Learn x86 reverse engineering.
    • Learn binary exploitation.

https://www.hoppersroppers.org/roadmap/training/pwning.html

Roadmap

  • I will structure my learning plan as follows.
  • I will leave a check mark ( ✓ ) when I'm done with the topic.
  • At some point in time I will also start studying the following:

https://github.com/hoppersroppers/nightmare/blob/master/modules/01-intro_assembly/readme.md

The Basics

  • [✓] Install the necessary tools (installation/)

    • [✓] Install nasm (nasm.md)

    • [✓] Install ld, gcc, hexdump, objdump (tools)

  • [✓] First program: the exit system call (first_prog/)

    • [✓] Write, assemble and run a program that "does nothing", and check the return value (build.md)

    • [✓] Try to exit with various exit codes (exit8.asm and exit256.asm)

  • [✓] Make a hello world program

  • [✓] Call assembly functions from C (tasks/calling_from_c/Calling_from_c.md)

    • [✓] Write an assembly program with a callable function that returns a 32-bit integer (ret_int.asm)

    • [✓] Write a small C program that calls this assembly function and displays the result in decimal, hexadecimal and binary formats (caller.c)

    • [✓] Write a program with a function that returns a negative number (ret_neg.asm)

  • Registers (registers)

    • [✓] Register names and sizes (x86general.md)

    • The mov instruction

    • [✓] Write a program that moves values between registers of different sizes (registers.md)

    • The xchg instruction

  • [✓] Look into machine code (bin_inspection/howto.md)

    • [✓] Check out the machine code of a program with hexdump

    • [✓] Disassemble a program with objdump

  • [✓] Basic Arithmetic (arithmetic/arithmetics.md)

    • [✓] Make a program that sums two numbers (add.asm)

    • [✓] Make a program that subtracts two numbers (sub.asm)

    • [✓] Make a program that uses increment (inc.asm)

    • [✓] Make a program that uses decrement (dec.asm)

    • [✓] Make a program that uses unsigned integer multiplication (mul.asm)

    • [✓] Make a program that uses signed integer multiplication (imul.asm)

    • [✓] Make a program that obtains the negative of a number (neg.asm)

  • [✓] Labels and Unconditional Jumps (tasks/jump/unconditional_jumps.md)

  • [✓] Flags, Comparisons and Conditional Jumps (tasks/flags/control_flow.md)

    • [✓] Write a program with a conditional jump (cond_jump.asm)

    • [✓] Write a program with a loop (loop.asm)

    • [✓] Write a program using the overflow flag (overflow.asm)

    • [✓] Write a program contrasting the above and below comparisons with the greater than and less than comparisons (above_below.asm)

  • [✓] Logical and Bitwise Operations (logic/logic.md)

  • [✓] Data Types, Memory Addressing and the .data Section (data/build.md)

    • [✓] How memory works in Linux? (linux_memory.md)

    • [✓] Write a program that uses the .data section (print_data.asm)

    • [✓] Write a program that uses different data types (types.asm)

    • [✓] Write a program that uses addressing with displacement (ret4bytes.asm)

    • [✓] Write a program using addressing with a base register, an index register and scale factor (ret_words.asm)

    • [✓] Write a program using the .bss section (bss.asm)

    • [✓] Write a program that uses a "global variable" from the .bss section (var_bss.asm)

    • [✓] Write a program that increments a "global variable" from the .bss section (inc_var.asm)

    • [✓] Write a program that manipulates an array (array.asm)

  • [✓] The Stack (stack/stack.md)

    • [✓] Write a program that uses push and pop (push_pop.asm)

    • [✓] Write a program that uses the stack pointer to allocate space and access elements on the stack (esp1.asm and esp2.asm)

  • [✓] The call Instruction (call/call.md)

    • [✓] Write a program that uses call (call.asm)

    • [✓] Write a program that calls a print function/subroutine (print.asm)

  • [] Calling External Functions (extern/external.md)

    • [✓] Write a program divided in two files using extern/global (uselib.asm and lib.asm)

    • [✓] Write a program divided into two .asm files using the include macro (killer.asm and libkiller.asm)

    • Write a library with a function containing arguments, and call it from another asm file

    • [] Call a function from C

    • [] Write an assembly library function that takes arguments, and call it from C

    • [] Write an assembly program that calls a C function

    • [✓] Write an assembly program that calls a C library function (malloc.asm)

  • Using the Heap

    • [] Use C's malloc and free to allocate and free memory dynamically
  • Special mov instructions

    • [] Sign and Zero Extend mov and "size casting" directive

    • Conditional mov

  • [✓] Division Arithmetics (tasks/arithmetics2/division.md)

    • [✓] Write a program with div instruction (div.asm)

    • [✓] Write a program that uses idiv instruction to perform signed division (idiv.asm)

    • [✓] Write a program that does proper signed division with negative divisor (idiv2.asm)

  • [] Manipulating Strings

  • [] Floating point arithmetic

  • [] NASM local labels

Challenges

  • [] Write a function that receives an integer and prints it

  • [] Write a function that receives an integer and returns a string with it

  • [] Write a bootloader

  • [] Write a function that reverses any string it gets

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published