7G-one/x86-Assembly-from-Hello-World-to-Reverse-Engineering-A-Security-Focused-Course
GitHub: 7G-one/x86-Assembly-from-Hello-World-to-Reverse-Engineering-A-Security-Focused-Course
一门以安全研究为目标的 x86 汇编语言教程,从基础语法逐步深入到 Shellcode 编写、栈溢出利用和逆向分析实战。
Stars: 0 | Forks: 0
# x86 汇编:从 Hello World 到逆向分析
中文 | English
汇编语言是离 CPU 最近的编程语言。学它不是为了用它写业务系统,而是为了真正理解计算机在底层到底在干什么——以及,安全研究员怎么利用它找到漏洞、写 Shellcode、做逆向分析。 这门课从"汇编是什么"开始,18 课带你走到 IDA 逆向实战。零基础可学,但学到后面会越来越刺激。 ## 这门课到底在教什么 ### 基础篇(00-06)—— 认识你的 CPU | 课号 | 文件 | 你会做什么 | 顺便学了什么 | |------|------|-----------|-------------| | 00 | `00_零基础入门.asm` | 写出你的第一个汇编程序 | 汇编是什么、CPU 怎么工作、计算机的"世界观" | | 01 | `01_寄存器详解.asm` | 用寄存器存取数据 | 通用/指针/段/标志寄存器,CPU 的"工作台" | | 02 | `02_数据定义与内存.asm` | 在内存里定义和管理数据 | DB/DW/DD/DQ、字节序、内存布局 | | 03 | `03_数据传送指令.asm` | 在寄存器和内存之间搬数据 | MOV/LEA/XCHG/PUSH/POP,MOVZX/MOVSX | | 04 | `04_算术运算指令.asm` | 让 CPU 帮你算数 | ADD/SUB/MUL/DIV、标志位(溢出、进位) | | 05 | `05_逻辑与位运算.asm` | 直接操控每一个 bit | AND/OR/XOR/NOT、移位和旋转 | | 06 | `06_比较与跳转.asm` | 让程序学会"做选择" | CMP/TEST、条件跳转、无条件跳转 JMP | ### 进阶篇(07-13)—— 理解程序的骨架 | 课号 | 文件 | 你会做什么 | 顺便学了什么 | |------|------|-----------|-------------| | 07 | `07_循环结构.asm` | 用汇编实现循环 | LOOP 指令、手动循环、嵌套循环 | | 08 | `08_栈与函数调用上.asm` | 理解函数调用的底层机制 | 栈的工作原理、CALL/RET、调用约定 | | 09 | `09_栈与函数调用下.asm` | 深入栈帧和参数传递 | 局部变量、递归、栈帧结构(安全研究的核心!) | | 10 | `10_字符串操作.asm` | 高效处理字符串 | MOVS/CMPS/SCAS/STOS/LODS、REP 前缀 | | 11 | `11_数组与结构体.asm` | 用汇编管理复杂数据 | 数组访问、结构体定义、内存对齐 | | 12 | `12_浮点运算.asm` | 让 CPU 做小数运算 | FPU 寄存器栈、浮点指令、SIMD 简介 | | 13 | `13_中断与系统调用.asm` | 跟操作系统对话 | 中断机制、INT 指令、Windows API 调用 | ### 实战篇(14-17)—— 安全研究的起点 | 课号 | 文件 | 你会做什么 | 顺便学了什么 | |------|------|-----------|-------------| | 14 | `14_内联汇编与混合编程.asm` | 在 C 语言里嵌入汇编 | 调用约定匹配、C 和汇编如何协作 | | 15 | `15_Shellcode基础.asm` | 编写真正的 Shellcode | Shellcode 编码解码、避免坏字符、注入原理 | | 16 | `16_栈溢出原理.asm` | 理解最经典的漏洞利用方式 | 缓冲区溢出、控制流劫持、防护机制(DEP/ASLR/Stack Canary) | | 17 | `17_逆向分析入门.asm` | 用 IDA 看懂别人的程序 | 反汇编阅读、逆向思维、实战分析 | ## 学习路线 别跳着学。栈溢出和逆向分析需要用到前面所有的知识: 00 零基础入门 → 01 寄存器详解 → 02 数据定义与内存 ↓ 03 数据传送 → 04 算术运算 → 05 逻辑位运算 → 06 比较跳转 ↓ 07 循环结构 → 08-09 栈与函数调用 → 10 字符串操作 ↓ 11 数组结构体 → 12 浮点运算 → 13 中断系统调用 ↓ 14 内联汇编 → 15 Shellcode → 16 栈溢出 → 17 逆向分析 ## 课程特色 ### 从零到安全研究,一条线走完 这不是一门"只教语法"的汇编课。它从最基础的寄存器讲起,一路讲到 Shellcode 编写、栈溢出利用、IDA 逆向分析——走完整条线,你就具备了安全研究的基本功。 ### 生活类比,把抽象变具体 - **寄存器** = 工作台,干活的地方就这么大 - **内存** = 仓库,东西多但取起来慢 - **栈** = 叠盘子,后放的先拿 - **CALL/RET** = 打电话,CALL 拨号,RET 挂电话 - **栈溢出** = 盘子叠太多,溢出来把旁边的东西砸了 - **Shellcode** = 偷偷塞进去的"指令纸条" ### 每课都有练习题和参考答案 汇编是手艺活,光看不敲等于没学。每课都有练习题,做完才算过关。 ### 注释多到像有老师在旁边 每个 `.asm` 文件都有大量中文注释,解释每条指令在干什么、为什么这么写、不这么写会怎样。 ## 环境要求 | 工具 | 用途 | 推荐 | |------|------|------| | 汇编器 | 把 `.asm` 变成 `.obj` | [NASM](https://www.nasm.us/) | | 链接器 | 把 `.obj` 变成 `.exe` | GoLink 或 MSVC 的 link.exe | | 调试器 | 单步执行、看寄存器和内存 | x64dbg(推荐)、OllyDbg、WinDbg | | 逆向工具 | 反汇编、静态分析 | IDA Free / Ghidra | | 平台 | — | Windows 32 位 | ## 编译方法 # 汇编 nasm -f win32 00_零基础入门.asm -o 00.obj # 链接(GoLink) golink /entry:_start 00.obj kernel32.dll user32.dll # 或用 MSVC 的 link link /subsystem:console /entry:_start 00.obj kernel32.lib user32.lib ## 学习建议 1. **按顺序学**:后面的内容依赖前面的知识,跳着学你会懵 2. **每课代码都亲手敲**:复制粘贴学不会汇编 3. **用调试器单步跑**:看寄存器和内存怎么变的,这是学汇编最快的方式 4. **做完练习题**:练习题是检验你有没有真正理解的唯一标准 5. **多写多练**:汇编是手艺活,写多了自然熟 ## 调试器推荐 | 调试器 | 平台 | 特点 | |--------|------|------| | x64dbg | Windows | 开源,支持 32/64 位,界面友好,新手首选 | | OllyDbg | Windows | 经典 32 位调试器,老牌但好用 | | WinDbg | Windows | 微软官方,功能强大,学习曲线陡 | | GDB | Linux | 命令行,配合 GEF/pwndbg 插件很好用 | ## 推荐资源 - [NASM 官方文档](https://www.nasm.us/doc/) - [Intel 软件开发手册](https://software.intel.com/en-us/articles/intel-sdm) - [x86 指令参考](https://www.felixcloutier.com/x86/) - [CTF Wiki - Pwn](https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stackoverflow-basic/) - [Exploit Database](https://www.exploit-db.com/)标签:x86, 云资产清单, 安全意识培训, 安全报告生成, 底层开发, 快速连接, 教程, 汇编语言, 逆向工程