DavidTbilisi/nasm_learn

GitHub: DavidTbilisi/nasm_learn

一个完全在浏览器中运行的交互式 x86 汇编学习环境,通过逐步调试器、演练场和限时训练帮助用户零安装掌握汇编基础。

Stars: 0 | Forks: 0

# NASM 学习 [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/c8cbf34d0f234452.svg)](https://github.com/DavidTbilisi/nasm_learn/actions/workflows/test.yml) [![Deploy](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3fd5aedb19234458.svg)](https://github.com/DavidTbilisi/nasm_learn/actions/workflows/deploy.yml) [![License: ISC](https://img.shields.io/badge/license-ISC-blue.svg)](LICENSE) [![在线演示](https://img.shields.io/badge/demo-live-brightgreen)](https://davidtbilisi.github.io/nasm_learn/) 一个完全在浏览器中运行的交互式 x86 汇编学习环境 —— 无需安装。 **[在线演示 →](https://davidtbilisi.github.io/nasm_learn/)** ![复古课程视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b7b317b96e234500.png) *荧光绿复古终端 —— 带有实时寄存器/标志/栈状态的引导式课程* ## 适用人群 - **CS 学生**:正在上汇编语言课程,想要一个沙盒在课余时间练习示例。 - **渗透测试学习者**:正在准备 HTB / TryHackMe / OSCP,需要流畅地阅读反汇编代码。 - **CTF 选手**:在 pwn / 逆向工程赛道上,经常在栈帧和调用约定处遇到瓶颈。 - **嵌入式系统 / 固件开发者**:经常阅读编译器输出,希望建立更快的思维模型。 - **复古游戏 / Demo 爱好者**(NES, C64, Atari):想要一个现代化的单步调试器来原型化例程。 ## 12 节课后你能做什么 - 阅读反汇编的 C 输出并跟踪控制流。 - 在真实的 Linux 二进制文件上使用 GDB+GEF 设置断点并单步调试。 - 在 shellcode payload 中发现字节序错误。 - 一眼识别栈帧序言 / 结语。 - 在反汇编代码中识别 SysV AMD64 调用约定。 - 无需运行代码即可通过指令链预测寄存器状态。 - 编写一个小型 NASM 程序,在 Linux 上通过 `syscall` 打印到 stdout。 - 凭记忆在纸上勾勒出缓冲区溢出场景。 ## 演示 ![单步调试器演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/913ad2db95234506.gif) *逐条单步执行指令 —— 实时观察寄存器、标志和栈的更新* ## 工具如何帮助你达成目标 - **12 节引导式课程**,涵盖寄存器、算术、标志、内存、栈、循环、函数、字符串、数组、位操作和系统调用。 - **逐步调试器** —— 运行、向前/向后单步执行指令,实时查看寄存器、标志和栈的更新。 - **演练场** —— 自由格式的编辑器,可编写和调试任何你喜欢的汇编代码,内置 6 个代码片段和自动保存功能。 - **测验模式** —— 选择题和填空题,提供即时反馈和进度条。 - **训练模式** —— 跨越 7 个主题类别的限时训练,在压力下建立熟练度。 - **3 种主题** —— 复古(荧光绿 CRT)、赛博朋克(霓虹黑色)、学术(暖象牙色,最大可读性)。 - **可调整大小的面板** —— 拖动手柄以重排布局;双击任何手柄重置;通过 `localStorage` 持久化。 - 带有 NASM 语法高亮的 **CodeMirror 编辑器**。 ## 截图 ### 调试器 —— 单步执行指令 ![复古调试器](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e62da7c4b7234513.png) ### 演练场 —— 自由编写,运行任何代码 ![演练场](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6f4b3fd769234520.png) ### 测验模式 ![测验](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/a5b59813a3234525.png) ### 训练模式 —— 限时训练 ![训练](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/1e0bb56a58234530.png) ### 主题 | 赛博朋克 | 学术 | |-----------|----------| | ![赛博朋克](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/50c3f02f61234537.png) | ![学术](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/1820e4c7ca234543.png) | ## 本地运行 ``` npx serve tutorial ``` ## 模拟器 JavaScript 模拟器 (`tutorial/simulator.js`) 实现了 x86 的一个子集: | 类别 | 指令 | |---|---| | 数据传送 | `mov`, `xchg`, `lea`, `push`, `pop` | | 算术 | `add`, `sub`, `mul`, `imul`, `div`, `idiv`, `inc`, `dec`, `neg` | | 逻辑 | `and`, `or`, `xor`, `not`, `shl`, `shr`, `sar` | | 比较 | `cmp`, `test` | | 跳转 | `jmp`, `je/jz`, `jne/jnz`, `jl/jnge`, `jle/jng`, `jg/jnle`, `jge/jnl`, `jb`, `jbe`, `ja`, `jae`, `js`, `jns` | | 函数 | `call`, `ret` | | 输出 | `int 0x80` (Linux write/exit syscalls) | 寄存器:`eax ebx ecx edx esi edi esp ebp` 标志:`ZF CF SF OF DF` ## 在本地构建 NASM 程序 ### Windows (Win32 PE32) — `main.asm` ``` nasm -f win32 main.asm -o main.o ld main.o -o main -lkernel32 ./main ``` ### Linux (x86-64 ELF) — `examples/linux-hello.asm` ``` nasm -f elf64 examples/linux-hello.asm -o linux-hello.o ld linux-hello.o -o linux-hello ./linux-hello ``` Linux 示例直接调用内核 —— 不使用 libc —— 使用 `sys_write` (syscall 1) 和 `sys_exit` (syscall 60)。 ### macOS (x86-64 Mach-O) — `examples/macos-hello.asm` ``` nasm -f macho64 examples/macos-hello.asm -o macos-hello.o ld -macos_version_min 10.13 -lSystem -o macos-hello macos-hello.o ./macos-hello ``` 在 macOS 上,syscall 号与 BSD 类 `0x2000000` 进行了按位或运算,入口点是 `_main`,并且 `ld` 需要 `-lSystem` 以及最低版本标志。Mach-O 节名与 ELF 不同(例如 `__TEXT`, `__DATA`),但 NASM 的 `macho64` 目标会处理转换。 ## 测试 [Playwright](https://playwright.dev/) 端到端测试套件 —— 54 个测试,涵盖页面加载、标签页导航、模拟器运行/单步/重置、调整大小手柄、测验和训练。 ``` npm install npx playwright install chromium npm test ``` 要按名称运行单个测试: ``` npx playwright test --grep "error banner" ``` CI 在每次推送和 PR 时通过 [`.github/workflows/test.yml`](.github/workflows/test.yml) 运行完整套件。 ## Neural OS 库的一部分 本仓库是一系列小型、专注的学习资源之一: - [memory-palace-lab](https://github.com/DavidTbilisi/memory-palace-lab) — 学院旗舰产品 - [SorobanMachine](https://github.com/DavidTbilisi/SorobanMachine) — 心算训练 - [learn_linux](https://github.com/DavidTbilisi/davidtbilisi.learn_linux) — Linux 基础 - [learning_git](https://github.com/DavidTbilisi/davidtbilisi.learning_git) — 从零开始学习 Git - [cheatsheets-ka](https://github.com/DavidTbilisi/cheatsheets-ka) — 快速参考手册 - [IT-Dictionary](https://github.com/DavidTbilisi/IT-Dictionary) — 术语参考 ## 许可证 [ISC](LICENSE) — 请参阅仓库根目录下的 `LICENSE` 文件。
标签:DNS 反向解析, IP 地址批量处理, NASM, Pwn, Shellcode, x86, 云资产清单, 在线调试器, 快速连接, 技术调研, 数据可视化, 汇编语言, 浏览器端, 特征检测, 系统底层, 缓冲区溢出, 网络安全, 自定义脚本, 计算机科学教育, 调试辅助, 逆向工程, 隐私保护