Add files via upload
This commit is contained in:
parent
a8d5df031a
commit
c86d5ed12e
2010
nop/asm23.py
Normal file
2010
nop/asm23.py
Normal file
File diff suppressed because it is too large
Load diff
2081
nop/asm23_.py
Normal file
2081
nop/asm23_.py
Normal file
File diff suppressed because it is too large
Load diff
110
nop/disassembler_skip_zero.py
Normal file
110
nop/disassembler_skip_zero.py
Normal 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()
|
||||
149
nop/disassembler_skip_zero2.py
Normal file
149
nop/disassembler_skip_zero2.py
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
import tkinter as tk
|
||||
from tkinter import filedialog, messagebox
|
||||
import os
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
|
||||
def binary_to_disasm(input_file, output_file=None, skip_zeros=True):
|
||||
"""Конвертирует бинарный файл в дизассемблированный код с помощью ndisasm."""
|
||||
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}"
|
||||
|
||||
# Получаем текущую дату и время
|
||||
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# Фильтруем строки в зависимости от настройки
|
||||
lines = result.stdout.splitlines()
|
||||
if skip_zeros:
|
||||
filtered_lines = [line for line in lines if 'add [rax],al' not in line]
|
||||
filter_status = "Нули (add [rax],al) пропущены"
|
||||
else:
|
||||
filtered_lines = lines
|
||||
filter_status = "Нули (add [rax],al) не пропущены"
|
||||
|
||||
# Записываем отфильтрованные строки в файл с заголовком
|
||||
with open(output_file, 'w', encoding='utf-8') as out_file:
|
||||
# Добавляем заголовок с информацией
|
||||
out_file.write("=" * 60 + "\n")
|
||||
out_file.write(f"Дизассемблированный код сгенерирован с помощью ndisasm\n")
|
||||
out_file.write(f"Исходный файл: {os.path.basename(input_file)}\n")
|
||||
out_file.write(f"Дата создания: {current_time}\n")
|
||||
out_file.write(f"Статус фильтра: {filter_status}\n")
|
||||
out_file.write("=" * 60 + "\n\n")
|
||||
|
||||
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
|
||||
|
||||
# Получаем состояние галочки
|
||||
skip_zeros = skip_zeros_var.get()
|
||||
|
||||
success, result = binary_to_disasm(input_file, skip_zeros=skip_zeros)
|
||||
|
||||
if success:
|
||||
messagebox.showinfo(
|
||||
"Готово",
|
||||
f"Файл успешно дизассемблирован!\n"
|
||||
f"Пропуск нулей: {'ВКЛ' if skip_zeros else 'ВЫКЛ'}\n"
|
||||
f"Результат сохранён как:\n{result}"
|
||||
)
|
||||
else:
|
||||
messagebox.showerror(
|
||||
"Ошибка",
|
||||
f"Не удалось дизассемблировать файл:\n{result}"
|
||||
)
|
||||
|
||||
def main():
|
||||
"""Создаём графический интерфейс"""
|
||||
global skip_zeros_var
|
||||
|
||||
root = tk.Tk()
|
||||
root.title("Дизассемблер бинарных файлов")
|
||||
root.geometry("500x250")
|
||||
|
||||
# Центрируем окно
|
||||
root.eval('tk::PlaceWindow . center')
|
||||
|
||||
# Переменная для хранения состояния галочки
|
||||
skip_zeros_var = tk.BooleanVar(value=True) # По умолчанию включено
|
||||
|
||||
# Создаём элементы интерфейса
|
||||
label = tk.Label(
|
||||
root,
|
||||
text="Дизассемблер бинарных файлов (ndisasm)",
|
||||
font=('Arial', 14),
|
||||
pady=20
|
||||
)
|
||||
label.pack()
|
||||
|
||||
# Фрейм для галочки
|
||||
checkbox_frame = tk.Frame(root)
|
||||
checkbox_frame.pack(pady=10)
|
||||
|
||||
# Галочка для пропуска нулей
|
||||
skip_zeros_check = tk.Checkbutton(
|
||||
checkbox_frame,
|
||||
text="Пропускать нули (add [rax],al)",
|
||||
variable=skip_zeros_var,
|
||||
font=('Arial', 10)
|
||||
)
|
||||
skip_zeros_check.pack()
|
||||
|
||||
# Кнопка конвертации
|
||||
btn_convert = tk.Button(
|
||||
root,
|
||||
text="Выбрать файл и дизассемблировать",
|
||||
command=select_and_convert,
|
||||
font=('Arial', 12),
|
||||
padx=20,
|
||||
pady=10
|
||||
)
|
||||
btn_convert.pack(pady=10)
|
||||
|
||||
# Кнопка выхода
|
||||
btn_exit = tk.Button(
|
||||
root,
|
||||
text="Выход",
|
||||
command=root.quit,
|
||||
font=('Arial', 10),
|
||||
padx=20,
|
||||
pady=5
|
||||
)
|
||||
btn_exit.pack(pady=10)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
93
nop/hex_converter.py
Normal file
93
nop/hex_converter.py
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
import tkinter as tk
|
||||
from tkinter import filedialog, messagebox
|
||||
import os
|
||||
|
||||
def binary_to_hex(input_file, output_file=None):
|
||||
"""Конвертирует бинарный файл в hex-текст"""
|
||||
try:
|
||||
with open(input_file, 'rb') as bin_file:
|
||||
binary_data = bin_file.read()
|
||||
|
||||
hex_data = binary_data.hex()
|
||||
|
||||
# Форматируем с пробелами между байтами
|
||||
formatted_hex = ' '.join([hex_data[i:i+2] for i in range(0, len(hex_data), 2)])
|
||||
|
||||
# Если выходной файл не указан, создаём рядом с оригиналом
|
||||
if not output_file:
|
||||
base_name = os.path.splitext(input_file)[0]
|
||||
output_file = f"{base_name}_hex.txt"
|
||||
|
||||
with open(output_file, 'w') as hex_file:
|
||||
hex_file.write(formatted_hex)
|
||||
|
||||
return True, output_file
|
||||
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
|
||||
def select_and_convert():
|
||||
"""Открывает диалог выбора файла и конвертирует"""
|
||||
input_file = filedialog.askopenfilename(
|
||||
title="Выберите бинарный файл",
|
||||
filetypes=(("Бинарные файлы", "*.elf"), ("Все файлы", "*.*"))
|
||||
)
|
||||
|
||||
if not input_file:
|
||||
return
|
||||
|
||||
success, result = binary_to_hex(input_file)
|
||||
|
||||
if success:
|
||||
messagebox.showinfo(
|
||||
"Готово",
|
||||
f"Файл успешно конвертирован!\nРезультат сохранён как:\n{result}"
|
||||
)
|
||||
else:
|
||||
messagebox.showerror(
|
||||
"Ошибка",
|
||||
f"Не удалось конвертировать файл:\n{result}"
|
||||
)
|
||||
|
||||
def main():
|
||||
"""Создаём графический интерфейс"""
|
||||
root = tk.Tk()
|
||||
root.title("Бинарный в HEX конвертер")
|
||||
root.geometry("400x200")
|
||||
|
||||
# Центрируем окно
|
||||
root.eval('tk::PlaceWindow . center')
|
||||
|
||||
# Создаём элементы интерфейса
|
||||
label = tk.Label(
|
||||
root,
|
||||
text="Конвертер бинарных файлов в HEX-текст",
|
||||
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()
|
||||
126
nop/hex_converter2.py
Normal file
126
nop/hex_converter2.py
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
import tkinter as tk
|
||||
from tkinter import filedialog, messagebox
|
||||
import os
|
||||
|
||||
def binary_to_hex(input_file, output_file=None, skip_zeros=False):
|
||||
"""Конвертирует бинарный файл в hex-текст. Пропускает нули, если skip_zeros=True."""
|
||||
try:
|
||||
with open(input_file, 'rb') as bin_file:
|
||||
binary_data = bin_file.read()
|
||||
|
||||
total_bytes = len(binary_data)
|
||||
|
||||
if skip_zeros:
|
||||
filtered_data = bytes(b for b in binary_data if b != 0)
|
||||
hex_data = filtered_data.hex()
|
||||
displayed_bytes = len(filtered_data)
|
||||
else:
|
||||
hex_data = binary_data.hex()
|
||||
displayed_bytes = total_bytes
|
||||
|
||||
# Форматируем с пробелами между байтами
|
||||
formatted_hex = ' '.join([hex_data[i:i+2] for i in range(0, len(hex_data), 2)])
|
||||
|
||||
# Добавляем заголовок в отчёт
|
||||
report = []
|
||||
report.append(f"Исходный файл: {os.path.basename(input_file)}")
|
||||
report.append(f"Общий размер файла: {total_bytes} байт")
|
||||
if skip_zeros:
|
||||
report.append("Режим: пропускать нулевые байты (0x00)")
|
||||
report.append(f"Выведено ненулевых байт: {displayed_bytes}")
|
||||
else:
|
||||
report.append("Режим: показывать все байты (включая 0x00)")
|
||||
report.append("")
|
||||
report.append(formatted_hex)
|
||||
|
||||
# Если выходной файл не указан, создаём рядом с оригиналом
|
||||
if not output_file:
|
||||
base_name = os.path.splitext(input_file)[0]
|
||||
suffix = "_hex_skip0.txt" if skip_zeros else "_hex.txt"
|
||||
output_file = f"{base_name}{suffix}"
|
||||
|
||||
with open(output_file, 'w') as hex_file:
|
||||
hex_file.write('\n'.join(report))
|
||||
|
||||
return True, output_file
|
||||
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
|
||||
|
||||
def select_and_convert():
|
||||
"""Открывает диалог выбора файла и конвертирует с учётом галочки."""
|
||||
input_file = filedialog.askopenfilename(
|
||||
title="Выберите бинарный файл",
|
||||
filetypes=(("Бинарные файлы", "*.elf *.bin *.out"), ("Все файлы", "*.*"))
|
||||
)
|
||||
|
||||
if not input_file:
|
||||
return
|
||||
|
||||
skip_zeros = skip_var.get()
|
||||
|
||||
success, result = binary_to_hex(input_file, skip_zeros=skip_zeros)
|
||||
|
||||
if success:
|
||||
messagebox.showinfo(
|
||||
"Готово",
|
||||
f"Файл успешно конвертирован!\nРезультат сохранён как:\n{result}"
|
||||
)
|
||||
else:
|
||||
messagebox.showerror(
|
||||
"Ошибка",
|
||||
f"Не удалось конвертировать файл:\n{result}"
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
"""Создаём графический интерфейс"""
|
||||
root = tk.Tk()
|
||||
root.title("Бинарный в HEX конвертер")
|
||||
root.geometry("450x220")
|
||||
root.eval('tk::PlaceWindow . center')
|
||||
|
||||
label = tk.Label(
|
||||
root,
|
||||
text="Конвертер бинарных файлов в HEX-текст",
|
||||
font=('Arial', 14),
|
||||
pady=10
|
||||
)
|
||||
label.pack()
|
||||
|
||||
global skip_var
|
||||
skip_var = tk.BooleanVar()
|
||||
chk_skip = tk.Checkbutton(
|
||||
root,
|
||||
text="Пропускать нулевые байты (0x00)",
|
||||
variable=skip_var,
|
||||
font=('Arial', 10)
|
||||
)
|
||||
chk_skip.pack(pady=5)
|
||||
|
||||
btn_convert = tk.Button(
|
||||
root,
|
||||
text="Выбрать файл и конвертировать",
|
||||
command=select_and_convert,
|
||||
font=('Arial', 12),
|
||||
padx=20,
|
||||
pady=10
|
||||
)
|
||||
btn_convert.pack(pady=10)
|
||||
|
||||
btn_exit = tk.Button(
|
||||
root,
|
||||
text="Выход",
|
||||
command=root.quit,
|
||||
font=('Arial', 10),
|
||||
padx=20,
|
||||
pady=5
|
||||
)
|
||||
btn_exit.pack(pady=10)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
113
nop/objdump_skip_zero.py
Normal file
113
nop/objdump_skip_zero.py
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
import tkinter as tk
|
||||
from tkinter import filedialog, messagebox
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
def binary_to_disasm(input_file, output_file=None):
|
||||
"""Конвертирует бинарный файл в дизассемблированный код с помощью objdump, исключая строки с 'add [rax],al'."""
|
||||
try:
|
||||
# Если выходной файл не указан, создаём рядом с оригиналом
|
||||
if not output_file:
|
||||
base_name = os.path.splitext(input_file)[0]
|
||||
output_file = f"{base_name}_disasm.txt"
|
||||
|
||||
# Вызываем objdump для дизассемблирования
|
||||
result = subprocess.run(
|
||||
['objdump', '-d', '-M', 'intel', input_file],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
text=True
|
||||
)
|
||||
|
||||
# Проверяем наличие ошибок от objdump
|
||||
if result.returncode != 0:
|
||||
error_msg = result.stderr.strip()
|
||||
return False, f"Ошибка objdump: {error_msg}"
|
||||
|
||||
# Фильтруем строки: исключаем те, которые содержат 'add [rax],al'
|
||||
# В objdump инструкция может выглядеть как 'add BYTE PTR [rax],al'
|
||||
lines = result.stdout.splitlines()
|
||||
|
||||
# Фильтруем строки с разными вариантами записи этой инструкции
|
||||
filtered_lines = []
|
||||
for line in lines:
|
||||
if 'add [rax],al' not in line and 'add BYTE PTR [rax],al' not in line:
|
||||
filtered_lines.append(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, "objdump не найден. Убедитесь, что binutils установлен и доступен в 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("Дизассемблер бинарных файлов (objdump)")
|
||||
root.geometry("450x200")
|
||||
|
||||
# Центрируем окно
|
||||
root.eval('tk::PlaceWindow . center')
|
||||
|
||||
# Создаём элементы интерфейса
|
||||
label = tk.Label(
|
||||
root,
|
||||
text="Дизассемблер бинарных файлов (objdump)",
|
||||
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()
|
||||
16
nop/test_nop.asm
Normal file
16
nop/test_nop.asm
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
section .text
|
||||
global _start
|
||||
|
||||
_start:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
16
nop/test_ноп.квс
Normal file
16
nop/test_ноп.квс
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
.текст
|
||||
.глобал _start
|
||||
|
||||
_start:
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
нет_операции
|
||||
55
nop/заметки.txt
Normal file
55
nop/заметки.txt
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
nasm -f elf64 test1.asm && ld test1.o -o test1
|
||||
|
||||
|
||||
|
||||
|
||||
Уровень 1: Простейшие (1 байт, без операндов)
|
||||
нет_операции (nop) - 0x90
|
||||
вернуться (ret) - 0xC3
|
||||
вызов_системы (syscall) - 0x0F 0x05
|
||||
остановить (hlt) - 0xF4
|
||||
установить_перенос (stc) - 0xF9
|
||||
сбросить_перенос (clc) - 0xF8
|
||||
отладка (int3) - 0xCC
|
||||
|
||||
Уровень 2: Простые с одним регистром (1-2 байта)
|
||||
втолкнуть (push reg) - 0x50+r
|
||||
вытолкнуть (pop reg) - 0x58+r
|
||||
увеличить (inc reg) - 0x40+r (32-bit), 0x48 0xFF /0 (64-bit)
|
||||
уменьшить (dec reg) - 0x48+r (32-bit), 0x48 0xFF /1 (64-bit)
|
||||
|
||||
Уровень 3: Регистр-регистр (2-3 байта)
|
||||
переместить (mov reg, reg) - 0x48 0x89 (modrm)
|
||||
прибавить (add reg, reg) - 0x48 0x01 (modrm)
|
||||
вычесть (sub reg, reg) - 0x48 0x29 (modrm)
|
||||
сравнить (cmp reg, reg) - 0x48 0x39 (modrm)
|
||||
|
||||
Уровень 4: Регистр-непосредственное значение (3-10 байт)
|
||||
переместить_имм (mov reg, imm) - зависит от размера
|
||||
прибавить_непосредственно (add reg, imm)
|
||||
сравнить_с (cmp reg, imm)
|
||||
|
||||
Уровень 5: Работа с памятью (3-7 байт)
|
||||
загрузить (mov reg, [reg]) - 0x48 0x8B (modrm)
|
||||
сохранить (mov [reg], reg) - 0x48 0x89 (modrm)
|
||||
втолкнуть_из_памяти (push mem)
|
||||
вытолкнуть_в_память (pop mem)
|
||||
|
||||
Уровень 6: Относительные переходы (5 байт)
|
||||
переход (jmp rel32) - 0xE9
|
||||
вызвать (call rel32) - 0xE8
|
||||
переход_если_равно (je rel32) - 0x0F 0x84
|
||||
|
||||
Уровень 7: Сложная адресация (6-7 байт)
|
||||
загрузить_адрес (lea reg, [rip+disp]) - 0x48 0x8D (modrm+sib+disp)
|
||||
|
||||
Уровень 8: 8-битные операции (особые случаи)
|
||||
загрузить_байт (mov reg8, imm8)
|
||||
прибавить_байт (add reg8, reg8)
|
||||
работа со старшими байтами (AH, CH, etc.)
|
||||
|
||||
Уровень 9: Специальные/сложные
|
||||
умножить (mul) - 0xF7 /4
|
||||
разделить (div) - 0xF7 /6
|
||||
строковые операции
|
||||
ввод-вывод
|
||||
Loading…
Reference in a new issue