2026-07-04 16:41:08 +03:00
```markdown
# ndisasm-ru — Русский дизассемблер x86-64 для языка К В С
**ndisasm-ru** — это модифицированная версия утилиты `ndisasm` из пакета **Netwide Assembler (NASM)** , адаптированная для вывода дизассемблированного кода на русском языке в синтаксисе языка **К В С ** .
---
## 📌 Особенности
- ✅ **Перевод мнемоник** инструкций x86-64 на русский язык
- ✅ **Перевод регистров** (64, 32, 16, 8-битных) на русский язык
- ✅ **Числовые значения** остаются без изменений
- ✅ **Синтаксис** соответствует языку программирования К В С
- ✅ **Полная совместимость** с оригинальным `ndisasm` по функциональности
- ✅ **Независимая сборка** — не требует наличия NASM
---
## 🚀 Быстрый старт
```bash
2026-07-04 16:41:12 +03:00
# Клонирование репозитория
2026-07-04 16:41:08 +03:00
git clone https://github.com/artradeskz/ndisasm-ru.git
cd ndisasm-ru
2026-07-04 16:41:12 +03:00
# Сборка
make
2026-07-04 16:41:08 +03:00
2026-07-04 16:41:12 +03:00
# Запуск
2026-07-04 16:41:08 +03:00
./ndisasm-ru -b 64 файл.elf
```
2026-07-04 16:41:12 +03:00
---
2026-07-04 16:41:08 +03:00
2026-07-04 16:41:12 +03:00
## 📖 Пример вывода
2026-07-04 16:41:08 +03:00
2026-07-04 16:41:12 +03:00
Ниже приведён фрагмент дизассемблирования самого `ndisasm-ru` в 64-битном режиме. Хорошо видно, как инструкции и регистры переводятся на русский язык:
```bash
$ ./ndisasm-ru -b 64 -o 0x81380 -e 0x81380 ndisasm-ru | head -20
00081380 B957040000 переместить есикс,0x457
00081385 488D154C6A0000 за г р у зить_а др е с рдикс,[rel 0x87dd8]
0008138C 488D355D6F0000 за г р у зить_а др е с рсиай,[rel 0x882f0]
00081393 488D3D4B6A0000 за г р у зить_а др е с рдиай,[rel 0x87de5]
0008139A E87F010000 вызвать 0x8151e
0008139F F30F1EFA endbr64
000813A3 50 втолкнуть раикс
000813A4 58 вытолкнуть раикс
000813A5 50 втолкнуть раикс
000813A6 E8B5540000 вызвать 0x86860
000813AB E860FEFFFF вызвать 0x81210
000813B0 F30F1EFA endbr64
000813B4 50 втолкнуть раикс
000813B5 58 вытолкнуть раикс
000813B6 488D3DC3720000 за г р у зить_а др е с рдиай,[rel 0x88680]
000813BD 50 втолкнуть раикс
000813BE 31C0 ис ключа юще е _или еаикс,еаикс
000813C0 E805000000 вызвать 0x813ca
000813C5 E8E6FFFFFF вызвать 0x813b0
000813CA F30F1EFA endbr64
```
**Что мы видим в этом выводе:**
- `mov ecx,0x457` → `переместить есикс,0x457`
- `lea rdx,[rel 0x87dd8]` → `за г р у зить_а др е с рдикс,[rel 0x87dd8]`
- `call 0x8151e` → `вызвать 0x8151e`
- `push rax` → `втолкнуть раикс`
- `pop rax` → `вытолкнуть раикс`
- `xor eax,eax` → `ис ключа юще е _или еаикс,еаикс`
2026-07-04 16:41:08 +03:00
---
## 📂 Структура проекта
```
ndisasm-ru/
├── src/
│ ├── ndisasm.c # Основной файл дизассемблера (с патчем)
│ ├── zamenyator.c # Модуль перевода мнемоник и регистров
│ ├── zamenyator.h # Заголовок модуля перевода
│ ├── disasm.c # Ядро дизассемблера (оригинал)
│ ├── sync.c # Синхронизация (оригинал)
│ └── ... # Остальные файлы из NASM
├── include/ # Заголовочные файлы
├── Makefile # Makefile для сборки
└── README.md # Этот файл
```
---
## 📋 Таблица перевода
### Мнемоники (основные)
| Английская | Русская (К В С ) |
|---|---|
| `mov` | `переместить` |
| `add` | `прибавить` |
| `sub` | `вычесть` |
| `cmp` | `сравнить` |
| `jmp` | `переход` |
| `je` / `jz` | `пе р е х о д_е с ли_р а вно ` / `пе р е х о д_е с ли_но ль` |
| `jne` / `jnz` | `пе р е х о д_е с ли_не р а вно ` / `пе р е х о д_е с ли_не _но ль` |
| `call` | `вызвать` |
| `ret` | `вернуться` |
| `push` | `втолкнуть` |
| `pop` | `вытолкнуть` |
| `test` | `проверить` |
| `xor` | `ис ключа юще е _или` |
| `and` | `и` |
| `or` | `или` |
| `inc` | `увеличить` |
| `dec` | `уменьшить` |
| `syscall` | `вызо в_с ис те мы` |
| `nop` | `не т_о пе р а ции` |
| `lea` | `за г р у зить_а др е с ` |
Полный список мнемоник и регистров см. в файле `src/zamenyator.c` .
### Регистры
| Английский | Русский (К В С ) |
|---|---|
| `rax` | `раикс` |
| `rbx` | `рбикс` |
| `rcx` | `рсикс` |
| `rdx` | `рдикс` |
| `rsi` | `рсиай` |
| `rdi` | `рдиай` |
| `rsp` | `рсипи` |
| `rbp` | `рбипи` |
| `r8` – `r15` | `р 8` – `р 15` |
| `eax` | `еаикс` |
| `ebx` | `ебикс` |
2026-07-04 16:41:12 +03:00
| `ecx` | `есикс` |
| `edx` | `едикс` |
| `esi` | `есиай` |
| `edi` | `едиай` |
| `esp` | `есипи` |
| `ebp` | `ебипи` |
2026-07-04 16:41:08 +03:00
---
2026-07-04 16:41:12 +03:00
## 🔧 Использование
2026-07-04 16:41:08 +03:00
### Основные опции
```bash
./ndisasm-ru -b 16/32/64 файл # Установка разрядности
./ndisasm-ru -o смещение файл # Установка базового адреса
./ndisasm-ru -e байты файл # Пропуск заголовка
./ndisasm-ru -k старт,байты # Пропуск региона
./ndisasm-ru -h # Справка
```
### Примеры
```bash
# Дизассемблирование 32-битного бинарного файла
./ndisasm-ru -b 32 program.bin
# Дизассемблирование 64-битного ELF-файла с пропуском заголовка
./ndisasm-ru -b 64 -e 0x40 program.elf
# Дизассемблирование с указанием виртуального адреса
./ndisasm-ru -b 64 -o 0x400000 -e 0x81380 program.elf
```
---
## 🧪 Тестирование
```bash
# Сборка и тестирование
make test
```
Или вручную:
```bash
# Создание тестового файла
echo -n -e "\xB8\x01\x00\x00\x00" > test.bin
# Запуск теста
./ndisasm-ru -b 32 test.bin
# Ожидаемый вывод: 00000000 B801000000 переместить еаикс,0x1
```
---
## ⚠️ Ограничения
- Поддерживаются только инструкции x86-64, присутствующие в таблице перевода
- Некоторые специфические инструкции (SSE, AVX, CET) могут отображаться на английском
- Сегментные префиксы пока не переведены
---
## 📜 Лицензия и авторство
### Оригинальный проект NASM
Исходный код основан на проекте **Netwide Assembler (NASM)** .
- **Автор:** Simon Tatham, Julian Hall и другие участники проекта NASM
- **Официальный сайт:** https://www.nasm.us/
- **Исходный код:** https://git.nasm.us/nasm.git
- **Лицензия:** BSD 2-Clause License
2026-07-04 16:41:12 +03:00
> Авторские права © 1996-2025 Авторы NASM. В с е права защищены.
>
> Распространение и использование разрешены при условии сохранения
> уведомления о б авторских правах и списка условий.
> Подробнее: https://opensource.org/licenses/BSD-2-Clause
2026-07-04 16:41:08 +03:00
### Модификация для К В С
- **Автор модификации:** artradeskz
- **Проект:** https://github.com/artradeskz/ndisasm-ru
- **Назначение:** Адаптация для языка программирования К В С
Модификация включает:
- Добавление модуля `zamenyator` для перевода мнемоник и регистров
- Патч `ndisasm.c` для вызова переводчика в функции `output_ins()`
- Сборка в независимый проект
---
## 🤝 Благодарности
- Команде разработчиков **NASM** за отличный инструмент
- Сообществу **К В С ** за вдохновение
---
## 🔗 Ссылки
- [Проект К В С ](https://github.com/artradeskz/kvs )
- [Официальный сайт NASM ](https://www.nasm.us/ )
- [Исходный код NASM ](https://git.nasm.us/nasm.git )
---
## 📧 Контакты
По вопросам и предложениям: [GitHub Issues ](https://github.com/artradeskz/ndisasm-ru/issues )
---
2026-07-04 16:41:12 +03:00
*ndisasm-ru — Русский дизассемблер для К В С *
```