Add files via upload

This commit is contained in:
artradeskz 2025-10-24 04:45:07 +03:00 committed by GitHub
parent 6977ae91ee
commit a8d5df031a
12 changed files with 6374 additions and 0 deletions

1999
квс/asm21_.py Normal file

File diff suppressed because it is too large Load diff

2011
квс/asm22.py Normal file

File diff suppressed because it is too large Load diff

2010
квс/asm23.py Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,110 @@
import tkinter as tk
from tkinter import filedialog, messagebox
import os
import subprocess
def binary_to_disasm(input_file, output_file=None):
"""Конвертирует бинарный файл в дизассемблированный код с помощью ndisasm, исключая строки с 'add [rax],al'."""
try:
# Если выходной файл не указан, создаём рядом с оригиналом
if not output_file:
base_name = os.path.splitext(input_file)[0]
output_file = f"{base_name}_disasm.txt"
# Вызываем ndisasm для дизассемблирования
result = subprocess.run(
['ndisasm', '-b64', input_file],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
# Проверяем наличие ошибок от ndisasm
if result.returncode != 0:
error_msg = result.stderr.strip()
return False, f"Ошибка ndisasm: {error_msg}"
# Фильтруем строки: исключаем те, которые содержат 'add [rax],al'
# Разбиваем вывод на строки
lines = result.stdout.splitlines()
# Фильтруем, исключая строки с 'add [rax],al'
# Используем strip(), чтобы убрать лишние пробелы/переводы строк, если нужно
filtered_lines = [line for line in lines if 'add [rax],al' not in line]
# Записываем отфильтрованные строки в файл
with open(output_file, 'w', encoding='utf-8') as out_file:
for line in filtered_lines:
out_file.write(line + '\n') # Восстанавливаем перевод строки
return True, output_file
except FileNotFoundError:
return False, "ndisasm не найден. Убедитесь, что NASM установлен и доступен в PATH"
except Exception as e:
return False, str(e)
def select_and_convert():
"""Открывает диалог выбора файла и конвертирует"""
input_file = filedialog.askopenfilename(
title="Выберите бинарный файл",
filetypes=(("Бинарные файлы", "*.bin *.elf *.o"), ("Все файлы", "*.*")) # Расширим типы файлов
)
if not input_file:
return
success, result = binary_to_disasm(input_file)
if success:
messagebox.showinfo(
"Готово",
f"Файл успешно дизассемблирован!\nНули (add [rax],al) удалены.\nРезультат сохранён как:\n{result}"
)
else:
messagebox.showerror(
"Ошибка",
f"Не удалось дизассемблировать файл:\n{result}"
)
def main():
"""Создаём графический интерфейс"""
root = tk.Tk()
root.title("Дизассемблер бинарных файлов")
root.geometry("450x200")
# Центрируем окно
root.eval('tk::PlaceWindow . center')
# Создаём элементы интерфейса
label = tk.Label(
root,
text="Дизассемблер бинарных файлов (ndisasm)",
font=('Arial', 14),
pady=20
)
label.pack()
btn_convert = tk.Button(
root,
text="Выбрать файл и дизассемблировать",
command=select_and_convert,
font=('Arial', 12),
padx=20,
pady=10
)
btn_convert.pack()
btn_exit = tk.Button(
root,
text="Выход",
command=root.quit,
font=('Arial', 10),
padx=20,
pady=5
)
btn_exit.pack(pady=20)
root.mainloop()
if __name__ == "__main__":
main()

19
квс/test1.asm Normal file
View file

@ -0,0 +1,19 @@
section .text
global _start
_start:
; Простые случаи с разными базовыми регистрами
push qword [rax]
pop qword [rax]
push qword [rbx]
pop qword [rbx]
push qword [rsp]
pop qword [rsp]
push qword [rbp]
pop qword [rbp]
;mov rax, 60
;mov rdi, 0
;syscall

9
квс/test2.asm Normal file
View file

@ -0,0 +1,9 @@
section .text
global _start
_start:
push qword [r8]
pop qword [r8]
push qword [r9]
pop qword [r9]
push qword [r10]
pop qword [r10]

7
квс/test3.asm Normal file
View file

@ -0,0 +1,7 @@
section .text
global _start
_start:
push qword [r12]
pop qword [r12]
push qword [r13]
pop qword [r13]

View file

@ -0,0 +1,18 @@
.текст
.глобал _start
_start:
; Системный вызов write(1, msg, len)
переместить_имм раикс, 1 ; номер syscall write = 1
переместить_имм рдиай, 1 ; stdout = 1
переместить_имм рсиай, msg ; указатель на строку
переместить_имм рдикс, 21 ; длина строки
вызов_системы
; Системный вызов exit(0)
переместить_имм раикс, 60 ; номер syscall exit = 60
переместить_имм рдиай, 0 ; код возврата
вызов_системы
.данные
msg: .строка "Привет мир!\n"

153
квс/тест.квс Normal file
View file

@ -0,0 +1,153 @@
.текст
.глобал _start
_start:
; ========== БАЗОВЫЕ ИНСТРУКЦИИ ==========
переместить раикс, рбикс
переместить рсипи, рдиай
переместить р8, р9
переместить_имм раикс, 0x12345678
переместить_имм еаикс, 0x1234
переместить_имм аикс, 0x12
переместить_имм ал, 0x42
прибавить раикс, рбикс
вычесть рсипи, рдиай
вызвать some_function
вернуться
вызов_системы
; ========== СРАВНЕНИЯ И ПЕРЕХОДЫ ==========
сравнить раикс, рбикс
сравнить32 еаикс, ебикс
сравнить_байт ал, бл
переход loop
переход_если_равно loop
переход_если_неравно loop
переход_если_ноль loop
переход_если_неоль loop
переход_если_перенос loop
переход_если_нет_переноса loop
переход_если_меньше loop
переход_если_больше loop
переход_если_меньше_или_равно loop
переход_если_больше_или_равно loop
ороткий_переход loop
; ========== АРИФМЕТИКА ==========
прибавить_непосредственно раикс, 100
вычесть_непосредственно рбикс, 50
увеличить раикс
уменьшить рбикс
увеличить ал
уменьшить бл
умножить раикс
умножить_знаковое рбикс
разделить рсикс
разделить_знаковое рдикс
отрицать раикс
инвертировать рбикс
; ========== ЛОГИЧЕСКИЕ ОПЕРАЦИИ ==========
и раикс, рбикс
или рсипи, рдиай
исключающее_или р8, р9
проверить раикс, рбикс
очистить раикс
; ========== СДВИГИ И ВРАЩЕНИЯ ==========
;сдвиг_влево раикс, 4
;сдвиг_вправо рбикс, 2
;сдвиг_арифметический_влево рсикс, 1
;сдвиг_арифметический_вправо рдикс, 3
ращать_влево р8, 5
ращать_вправо р9, 6
; ========== СТЕК И ПАМЯТЬ ==========
втолкнуть раикс
втолкнуть рбикс
втолкнуть_из_памяти [рсипи]
вытолкнуть рдиай
вытолкнуть_в_память [рбипи]
загрузить раикс, [рсипи]
сохранить [рдиай], рбикс
загрузить_адрес раикс, some_data
; ========== 8-БИТНЫЕ ОПЕРАЦИИ ==========
переместить_имм ал, 0xAA
прибавить_байт ал, бл
вычесть_байт бл, кл
сравнить_байт дл, бл
сохранить_байт [раикс], ал
сохранить_в_адрес [рбикс], ал
; ========== РАСШИРЕНИЕ РЕГИСТРОВ ==========
переместить_сулями раикс, ал
переместить_со_знаком рбикс, бл
; ========== ОБМЕН ==========
обменять раикс, рбикс
;обменять_с_памятью [рсипи], рдиай
; ========== ФЛАГИ ==========
установить_перенос
сбросить_перенос
установить_направление
сбросить_направление
втолкнуть_флаги
вытолкнуть_флаги
; ========== СТРОКОВЫЕ ОПЕРАЦИИ ==========
переместить_байт
переместить_слово
сравнить_байты
сканировать_байт
; ========== СПЕЦИАЛЬНЫЕ КОМАНДЫ ==========
идентифицировать_процессор
прочитать_счетчик
получить_управление
отладка
прервать 0x80
; ========== ВВОД-ВЫВОД ==========
ввод_байта 0x60
вывод_байта 0x61
; ========== ЦИКЛЫ ==========
цикл loop
; ========== .БАЙТ ДИРЕКТИВА ==========
.байт 0x90 0x90 0x90 ; NOP-ы для выравнивания
loop:
; Метка для переходов
нет_операции
остановить
some_function:
вернуться
.данные
some_data: .строка "Test data"
;constant_value: .константа 0xDEADBEEF
; ========== РАЗНЫЕ ТИПЫ ДАННЫХ ==========
byte_array: .байт 0x01 0x02 0x03 0x04
string_data: .строкауль "Null terminated"
wide_string: .строка "Wide string test"
; Глобальная константа
;.глобал global_var
;global_var: .константа 42

19
квс/тест1.квс Normal file
View file

@ -0,0 +1,19 @@
.текст
_старт:
; Простые случаи с разными базовыми регистрами
втолкнуть_из_памяти [раикс]
вытолкнуть_в_память [раикс]
втолкнуть_из_памяти [рбикс]
вытолкнуть_в_память [рбикс]
втолкнуть_из_памяти [рсипи]
вытолкнуть_в_память [рсипи]
втолкнуть_из_памяти [рбипи]
вытолкнуть_в_память [рбипи]
; Завершение программы
;переместить раикс, 60
;переместить рсикс, 0
;вызов_системы

11
квс/тест2.квс Normal file
View file

@ -0,0 +1,11 @@
.текст
_старт:
; Расширенные регистры R8-R15
втолкнуть_из_памяти [р8]
вытолкнуть_в_память [р8]
втолкнуть_из_памяти [р9]
вытолкнуть_в_память [р9]
втолкнуть_из_памяти [р10]
вытолкнуть_в_память [р10]

8
квс/тест3.квс Normal file
View file

@ -0,0 +1,8 @@
.текст
_старт:
; R12 и R13 требуют особой обработки как RSP/RBP
втолкнуть_из_памяти [р12]
вытолкнуть_в_память [р12]
втолкнуть_из_памяти [р13]
вытолкнуть_в_память [р13]