Skip to main content

Отладчики и дизассемблеры

Код возврата

Linux

Без отладчика можно смотреть состояние одного регистра за счет копирования его в регистр rdi (Linux) при завершении программы.

global _start           ; делаем метку метку _start видимой извне
 
section .text           ; объявление секции кода
_start:                 ; объявление метки _start - точки входа в программу 
    mov rdi, 23         ; помещаем в регистр rdi код возврата - 23 
    mov rax, 60         ; 60 - номер системного вызова exit
    syscall             ; выполняем системный вызов exit

Затем выполняется приложение, команда $? выводит код завершения предыдущей команды 

root@Eugene:~/asm# ./hello
root@Eugene:~/asm# echo $?
23

Windows: 

global _start       ; делаем метку метку _start видимой извне
 
section .text       ; объявление секции кода
_start:             ; метка _start - точка входа в программу
    mov rax, 23     ; помещаем в регистр rax код возврата - 23 
    ret             ; выход из программы

Получение кода возврата

echo %ERRORLEVEL%

GDB

Консольный отладчик. Загрузка программы для отладки: gdb <program> 

Консоль gdb:

Просмотр



list


Вывести 10 строк кода, повтор команды выводит следующие строки.


<число> Вывод конкретной строки.
x/s <адрес памяти> адрес, по которому размещена строка
x/c <адрес памяти> вывод одного символа
x/13с <адрес памяти> x/13c 0x000000 выведет 13 символов в виде строк
x/13d <адрес памяти> вывод 13 символов в виде чисел
x/13x <адрес памяти> 13 шестнадцатеричных символов
x/s  <имя ссылки> x/s &msg
Запуск

run
Выполнение загруженного приложения
disassemble <link> Дизассемблирование метки
break <link> Точка останова
info registers вывод значений регистров
step
следующий шаг 
continue
продолжение выполнения
print p <registr>

Вывод значения регистра 

print $rax
Дополнительно

quit
Выход
set <парам>

Настройка параметра. 

 set disassembly-flavor intel Установка формата отображения Intel