VS Code расширение для просмотра ассемблера рядом с исходным кодом C/C++.
Открывает дизассемблирование бинарника в соседней панели и связывает строки исходника с инструкциями ассемблера цветовым маппингом — как в Compiler Explorer (Godbolt), но для локальных бинарников.
- 🎨 Цветовой маппинг — каждая строка исходника и соответствующий ей блок asm окрашены одним цветом
- 🔄 Двусторонняя навигация — клик по исходнику подсвечивает asm, клик по asm подсвечивает исходник
- 📂 Многофайловые проекты — корректно работает когда бинарник собран из нескольких
.cфайлов - ⚡ Авто-обновление — следит за бинарником и перезагружает дизассемблирование при перекомпиляции
- 🔍 Auto-detect — автоматически находит GNU objdump или LLVM objdump
- 🔥 Live Mode — Godbolt-подобный режим: автоматически компилирует текущий файл в
.oи обновляет asm при сохранении или по таймеру - 🔀 Diff Mode — сравнение asm двух бинарников side-by-side с цветовым маппингом
code --install-extension bin/yasm-0.1.0.vsixgcc -g -O1 -o main main.cФлаг
-gобязателен — без него DWARF-информация не попадёт в бинарник и маппинг не заработает.
Через команду: Ctrl+Shift+P → YASM: Initialize Config — создаст конфиг с полным набором полей.
Ctrl+Shift+P → YASM: Show Assembly
Файл .yasm.json в корне рабочей папки:
{
"binary": "./main",
"sourceRoot": ".",
"objdump": "objdump",
"objdumpArgs": ["-M", "intel"],
"sections": [".text"],
"filterByFile": false,
"liveMode": {
"compileCommand": "gcc -g -O2 -c {file} -o {output}",
"trigger": "save",
"interval": 500
}
}| Параметр | Обязательный | По умолчанию | Описание |
|---|---|---|---|
binary |
да | — | Путь до скомпилированного бинарника |
sourceRoot |
— | "." |
Корень исходников (для резолва путей из DWARF) |
objdump |
— | auto-detect | Путь к objdump или llvm-objdump |
objdumpArgs |
— | [] |
Доп. аргументы (например ["-M", "intel"] для Intel-синтаксиса) |
sections |
— | [".text"] |
Секции для дизассемблирования |
filterByFile |
— | false |
Показывать только функции из текущего открытого файла. Помогает при больших бинарниках и Remote SSH |
liveMode.compileCommand |
— | — | Команда компиляции. {file} — исходник, {output} — выходной .o |
liveMode.trigger |
— | "save" |
"save" — при сохранении, "live" — автоматически по таймеру |
liveMode.interval |
— | 500 |
Интервал проверки изменений в мс (только для "live") |
| Команда | Описание |
|---|---|
| YASM: Show Assembly | Открыть панель с дизассемблированием бинарника |
| YASM: Refresh Disassembly | Перезагрузить дизассемблирование |
| YASM: Initialize Config | Создать .yasm.json через диалог |
| YASM: Diff Assembly | Сравнить asm двух бинарников в diff-режиме |
| YASM: Live Mode | Живая компиляция текущего файла в .o с показом asm. Повторный вызов останавливает |
Status bar показывает текущий режим, имя бинарника и количество функций; клик — refresh.
Режим живой компиляции — аналог Godbolt, но в IDE. Компилирует текущий .c/.cpp файл в объектный файл и показывает его asm side-by-side.
- Добавить секцию
liveModeв.yasm.json:
{
"binary": "./main",
"sourceRoot": ".",
"liveMode": {
"compileCommand": "gcc -g -O2 -c {file} -o {output}",
"trigger": "save"
}
}- Открыть
.cфайл и запуститьCtrl+Shift+P→ YASM: Live Mode
При каждом сохранении (или по таймеру в режиме "live") файл перекомпилируется и asm обновляется автоматически. Ошибки компиляции выводятся в Output Channel "YASM Live".
В compileCommand можно указать скрипт (./build.sh {file} {output}), который соберёт зависимости перед компиляцией основного файла.
При работе через VS Code Remote SSH или с большими бинарниками asm-файл может быть слишком большим для удобного просмотра. Включите filterByFile — тогда в панели asm будут только функции из текущего открытого файла:
{
"binary": "./main",
"sourceRoot": ".",
"filterByFile": true
}Фильтрация происходит на сервере до открытия файла — через SSH-канал передаётся только отфильтрованный результат.
Сравнение ассемблера двух бинарников (например, скомпилированных с разными флагами оптимизации):
gcc -g -O1 -o main_O1 main.c math_utils.c
gcc -g -O2 -o main_O2 main.c math_utils.cЗатем Ctrl+Shift+P → YASM: Diff Assembly → выбрать main_O1 → выбрать main_O2.
Оба asm открываются side-by-side с цветовым маппингом к исходнику.
В папке example/ три готовых примера на разных языках — все реализуют одну логику (square, sum_squares):
| Язык | Директория | Команда сборки |
|---|---|---|
| C | example/c/ |
gcc -g -O1 -o main main.c math_utils.c |
| Fortran | example/fortran/ |
gfortran -g -O1 -o main main.f90 math_utils.f90 |
| Rust | example/rust/ |
cargo build |
cd example/c # или fortran/ или rust/
gcc -g -O1 -o main main.c math_utils.c
code .Затем Ctrl+Shift+P → YASM: Show Assembly — и готово.
npm install
npm run compile
npx vsce package --allow-missing-repository --out bin/yasm-0.1.0.vsix- VS Code >= 1.85
objdump(GNU) илиllvm-objdumpв PATH- Бинарник, скомпилированный с
-g(DWARF debug info)