мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| asm:gdb [14/02/2012 20:14] – arabusov | asm:gdb [20/11/2013 22:50] (текущий) – arabusov | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ===== GDB ===== | ===== GDB ===== | ||
| - | Рассмотрим код | + | Подробнее [[http:// |
| + | |||
| + | Рассмотрим код: | ||
| < | < | ||
| ;в подключаемом *.o файле стандартной библиотеки Си | ;в подключаемом *.o файле стандартной библиотеки Си | ||
| ;Она передает управление на функцию " | ;Она передает управление на функцию " | ||
| ; | ; | ||
| - | global main | + | global main |
| ; | ; | ||
| - | section .text | + | section .text |
| ; | ; | ||
| - | main: | + | main: |
| - | mov rax,6 | + | mov rax,6 |
| - | mov rbx,3 | + | mov rbx, |
| - | add rax,rbx | + | add rax, |
| the_end: | the_end: | ||
| - | mov rax,1 | + | mov rax,1 |
| - | int 0x80 | + | int 0x80 |
| + | |||
| + | ret | ||
| - | ret | ||
| </ | </ | ||
| + | Ассемблируем и собираем программу: | ||
| + | < | ||
| + | user@host ~/ | ||
| + | user@host ~/ | ||
| + | Запускаем **gdb**: | ||
| + | < | ||
| + | GNU gdb (Ubuntu/ | ||
| + | Copyright (C) 2011 Free Software Foundation, Inc. | ||
| + | License GPLv3+: GNU GPL version 3 or later < | ||
| + | This is free software: you are free to change and redistribute it. | ||
| + | There is NO WARRANTY, to the extent permitted by law. Type "show copying" | ||
| + | and "show warranty" | ||
| + | This GDB was configured as " | ||
| + | For bug reporting instructions, | ||
| + | < | ||
| + | Reading symbols from / | ||
| + | (gdb) | ||
| + | </ | ||
| + | Устанавливаем точки останова: | ||
| + | < | ||
| + | Breakpoint 1 at 0x4004c0 | ||
| + | (gdb) b the_end | ||
| + | Breakpoint 2 at 0x4004d7 | ||
| + | (gdb) | ||
| + | </ | ||
| + | Далее можно использовать следующие команды: | ||
| + | * //r// -- выполнение до точки останова | ||
| + | * //ni// или //si// -- пошаговое выполнение | ||
| + | * //p $rax// -- показать содержимое регистра //rax// | ||
| + | * //info registers// -- показать информацию обо всех регистрах | ||
| + | Кроме регистров у нас есть память, | ||
| + | |||
| + | ===== Задание ===== | ||
| + | Напишите собственную программу, | ||