An open-source guide / insights to x86, x86-64 assembly, C-style C++, cybersecurity operations and Windows internals into a unified learning resource.
Important
This guide is catered towards cybersecurity development, not as much to cybersecurity operations / red teaming or blue teaming.
Tip
No prior knowledge is needed.
However, if you are starting from the ground up I would recommend following path:
graph TD;
cpp[C-style C++] --> x86-64[x86 & x86-64 assembly]
x86-64 --> nf[Networking fundamentals]
nf --> csec[Cybersecurity operations]
csec --> winint[Windows internals]
csec --> da[Dynamic analysis]
winint --> sa[Static analysis]
Tip
- Add this folder to your windows defender exclusions as it might remove valuable resources.
- Don't jump from topic to topic unless you know what you're doing. Most of the "steps" build on top of eachother.
- Install add-ons like dark reader and remove HTML elements that make reading better.
- If you really can't wrap your head around something, just ask ChatGPT to clarify it.
- Keep note of where you left off studying and make bookmarks in your browser application.
A C-style C++ summary of 2024. This summary is entirely possible thanks to the authors of the Learncpp website (Alex, Nascardriver and James C.) who made their knowledge available for public use.
Contains:
- Keywords
- Introduction / Getting started
- Basics
- Functions and files
- Debugging
- Fundamental data types
- Constants and strings
- Operators
- Bit manipulation
- Scope, duration & linkage
- Control flow
- Error detection and handling
- Type conversion, type aliases & type deduction
- Function overloading & function templates
- Compound types: References and pointers
- Compound types: Enums and structs
- Summary intermezzo
- C-style: Arrays & strings
- Dynamic allocation
- Functions
Note this guide was reworked from x86 to x86-64 for really exact and specific differences you should do your own research.
- Intro
- x86 Architecture
- Modes of operation
- Memory
- CPU Registers
- E Flags
- Word Sizes
- The Stack
- Calling Conventions
- Instructions / Opcodes
- Directives
- Instructions
- Radix characters
- Character constants
- Reserved words
- Identifiers
- Declaring variables
- Operator presedence
Note
To compile NASM on windows download NASM & w64devkit-x86.
Use NASM to assemble the .asm file into an object file (.obj). Run this command in the same directory where the .asm file is located:
nasm -f win32 -o fileName.obj fileName.asm
Use GCC to link the .obj file and create the final executable (.exe). Run this command:
gcc -mconsole -nostartfiles -o fileName.exe fileName.obj
- Godbolt Compiler Explorer
- JLearn PH's MASM32 assembly programming playlist
- MASM reference for more information on x86 assembly in MASM32.
- x86 and amd64 instruction reference for more information on x86 instructions.
- Tutorialspoint Nasm assembly
- Davy Wybiral's intro to x86 assembly language playlist
- OliveStem's x86 assembly with NASM playlist
- Pentesting Fundamentals
- Principles of Security
- Red teaming fundamentals
- Red teaming engagements
- Governance & Regulation
- TryHackMe
- A-Z Index of the Linux command line: bash + utilities
- IANA's Service Name and Transport Protocol Port Number Registry
- Pavel Yosifovich's windows internals
- Pavel Yosifovich's youtube channel
- 0xRick's dive into PE file format
- Empyreal96's info depot
- Alex Ionescu's blog
- Duncan Ogilvie's internals crash course
- Alexander Sotirov's internals talk
- Crow's malware development playlist
- Red Team Notes on reversing, forensics & misc
- Rexir's Windows Internals Videos
- TheSourceLens's Windows Internals part 1 playlist
- Nir Lichtman's diving into windows internals playlist
- Geoff Chappell
- Alex Ionescu's ReactOS
- Programming reference for the Win32 API