Subversion Repositories Kolibri OS

Rev

Rev 205 | Rev 542 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
Введение.
2
 
3
mtdbg представляет собой отладчик для операционной системы Kolibri. Данная
4
документация описывает возможности отладчика и работу с ним. Если нужны
5
какие-то возможности отладчика, которых ещё нет, либо обращайтесь на форум
6
meos.sysbin.com (раздел "Программы"), либо мыльте мне на адрес, указанный в
7
конце данного файла.
8
 
9
Общее описание.
10
 
11
В каждый момент времени mtdbg может отлаживать только одну программу. Назовём
12
такую программу загруженной для отладки. Если никакая программа не загружена,
13
абсолютное большинство действий по отладке недоступно.
14
 
15
mtdbg управляется командной строкой, вводимой с клавиатуры. Командная строка
16
изображается в нижней части окна отладчика. Обрабатываются стандартные клавиши
17
ввода Backspace,Delete,Home,End,стрелки влево/вправо.
18
Команды нечувствительны к регистру символов. В качестве разделителя
19
используется произвольное ненулевое число пробелов.
20
 
21
В любой момент отладчик можно завершить командой "quit" (без аргументов).
22
Впрочем, можно и просто нажать на кнопку закрытия в левом верхнем углу окна.
23
 
24
Запуск отладчика без параметров командной строки приводит к тому, что
25
никакая программа не загружена. Также mtdbg можно запускать с командной
26
строкой, в этом случае он попытается загрузить программу с именем, указанным
27
как первый аргумент командной строки, и параметрами, указанными как
28
последующие (если они есть).
29
 
30
Если никакая программа не загружена, то можно загрузить программу командой
31
load <полное имя исполняемого файла> [<аргументы>]
32
Например:
539 spraid 33
load /sys/example
34
LOAD   /sys/aclock w200 h200
205 heavyiron 35
  LoaD  /hd0/1/menuetos/dosbox/dosbox
36
Всё, что стоит после первого пробела после имени исполняемого файла, дословно
37
передаётся программе в качестве командной строки.
38
Команда load сообщает о результате в окне сообщений (немного выше окна
39
командной строки). Если программу удалось загрузить, то об этом появится
40
соответствующее сообщение; если не удалось, то в сообщении будет указана
41
причина ошибки. Наиболее вероятная - "file not found", если неправильно указано
42
имя файла.
43
Может случиться так, что загруженная программа упакована. Общий принцип
44
упаковки программ следующий: сначала исходный файл пакуется (каким-нибудь
45
алгоритмом сжатия), потом приписывается небольшой по размеру код, который
46
получает управление при запуске программы, распаковывает в памяти исходный код,
47
после чего передаёт ему управление. Если программа упакована, то её "настоящий"
48
код не виден и для отладки нужно предварительно пройти код распаковщика.
49
mtdbg определяет большинство существующих упаковщиков (mxp,mxp_lzo,mxp_nrv,
50
mtappack) и в этом случае предлагает автоматически пройти до "настоящего" кода.
51
Рекомендуется согласиться (нажать 'y' или ), но можно и отказаться.
52
При отказе и в случае, когда программа упакована чем-то неизвестным, можно
53
использовать команду "unpack" (без аргументов). Вызывайте её только в случае,
54
когда вы уверены, что программа упакована и что управление ещё не дошло до
55
основного кода!
56
 
57
Загруженную программу можно прибить командой "terminate" (без аргументов).
58
Команда "detach" (без аргументов) отключается от программы, после чего
59
программа продолжает выполняться нормально, как если бы отладчика не было.
60
После обеих этих команд программа перестаёт быть отлаживаемой.
61
 
62
Можно заново загрузить программу для отладки командой "reload" (без
63
аргументов). Если уже есть загруженная программа, то она прибивается и
64
запускается (с самого начала) новый экземпляр (с той же командной строкой),
65
в этом случае команда аналогична командам
66
terminate
67
load  
68
В противном случае заново загружается программа, которую отлаживали последней
69
(в текущем сеансе работы с mtdbg) (с той же командной строкой), т.е. почти то
70
же самое, что и
71
load  ,
72
но команда reload в обоих случаях короче и удобнее; кроме того, load считает,
73
что загружается новая программа, и переводит окно данных (см. ниже) на
74
нулевой адрес, а reload сохраняет текущий адрес.
75
 
76
Всегда доступна команда "help", которую можно сокращать до "h".
77
Все команды разбиты на группы.
78
help без аргументов показывает список групп команд.
79
help с указанием группы выводит список команд этой группы с краткими
80
комментариями.
81
help с указанием команды выводит информацию о заданной команде.
82
Например:
83
help
84
help control
85
h LoaD
86
 
87
Окно отладчика состоит из следующих элементов, перечисляемых сверху вниз:
88
- строка состояния. При наличии загруженной программы показывает ее имя и
89
  состояние ("Running"/"Paused"), при отсутствии сообщает "No program loaded".
90
- окно регистров - показывает значения регистров общего назначения, регистра
91
  eip и регистра флагов. Последний записан двумя способами: полное hex-значение
92
  и состояния отдельных флагов: CF,PF,AF,ZF,SF,DF,OF: если флаг сброшен, то
93
  изображается маленькая буква, если установлен, то заглавная.
94
  Регистры, изменившиеся с предыдущего момента, подсвечиваются зеленым.
95
- окно данных (окно дампа) - показывает содержимое памяти загруженной программы
96
- окно кода (окно дизассемблера) - показывает код программы в виде
97
  дизассемблированных инструкций
98
- окно сообщений
99
- окно командной строки
100
 
101
В окне дампа можно просматривать данные, начиная с любого адреса, для этого
102
есть команда
103
d <выражение>
104
Команда d без аргументов пролистывает окно дампа вниз.
105
То же самое относится к окну кода и команде
106
u <выражение>
107
или просто u.
108
Например:
109
d esi - показывает данные, находящиеся по адресу esi (например, полезна перед
110
  выполнением инструкции rep movsb)
111
d esp - показывает стек
112
u eip - дизассемблирует инструкции, начиная с текущей
113
 
114
Выражения в mtdbg могут включать
115
- шестнадцатеричные константы
116
- имена всех регистров общего назначения (8 32-битных, 8 16-битных и
117
  8 8-битных) и регистра eip; значения 16- и 8-битных регистров расширяются
118
  нулями до 32 бит
119
- четыре арифметические операции +,-,*,/ (со стандартными приоритетами) и
120
  скобки.
121
Все вычисления производятся по модулю 2^32.
122
Примеры выражений:
123
eax
124
eip+2
125
ecx-esi-1F
126
al+AH*bl
127
ax + 2* bH*(eip+a73)
128
3*esi*di/EAX
129
Команда
130
? <выражение>
131
вычисляет значение указанного выражения.
132
 
133
Значения регистров загруженной программы можно изменять командой r, имеющей
134
две абсолютно эквивалентные формы:
135
r <регистр> <выражение>
136
r <регистр>=<выражение>
137
(в обоих случаях можно расставлять пробелы по вкусу). В качестве регистра можно
138
указывать любой из вышеупомянутых - 24 регистра общего назначения и eip.
139
 
140
 
141
Допустим, команда load успешно загрузила программу для отладки.
142
Сразу после загрузки программа приостановлена и не выполняется.
143
Нажатие Ctrl+F7 (аналог командной строки - команда "s") делает один шаг в
144
загруженной программе, после чего управление возвращается отладчику, который
145
показывает новое содержимое регистров и памяти. Системный вызов int 40h при
146
этом считается одним шагом.
147
Нажатие Ctrl+F8 (аналог командной строки - команда "p") также делает шаг в
148
загруженной программе, но при этом вызовы процедур, строковые операции с
149
префиксом rep/repz/repnz и циклы loop выполняются как один шаг.
150
Команды пошагового выполнения используются, как правило, на отдельных участках
151
программы, когда нужно, например, регулярно отслеживать значения регистров
152
и/или каких-то переменных в памяти.
153
Команда
154
g <выражение>
155
возобновляет выполнение программы и ждёт, пока управление дойдёт до
156
eip=соответствующему адресу, а в этот момент приостанавливает программу.
157
Команда "g" без аргументов просто возобновляет выполнение программы.
158
 
159
Приостановить выполнение программы можно командой "stop" (без аргументов).
160
 
161
Обычно требуется, чтобы программа нормально выполнялась, но при наступлении
162
определённых условий программа приостанавалась и управление получал отладчик.
163
Соответствующие условия называются точками останова, breakpoint(s), в
164
просторечии - бряками. Простейший тип точек останова - на конкретный адрес,
165
т.е. прерывать выполнение при eip=<заданное значение>. Такие точки останова
166
устанавливаются командой
167
bp <выражение>
168
Замечание. Если есть только одна такая точка останова, удобнее вместо неё
169
использовать команду "g" с аргументом.
170
 
171
Другой тип точек останова - по обращению к заданному участку памяти.
172
Таких точек останова может быть не больше четырёх (поскольку используются
173
аппаратные возможности процессоров x86, где допускаются только 4 таких точки).
174
bpm <выражение> - брякается на любой доступ к байту по указанному адресу
175
bpm w <выражение> - брякается на запись байта по указанному адресу
176
bpmb,bpmw,bpmd <выражение> - брякаются на доступ к соответственно байту, слову
177
и двойному слову по указанному адресу. bpm и bpmb - синонимы. При использовании
178
bpmw,bpmd адрес должен быть выровнен соответственно на границу слова (т.е. быть
179
чётным) или на границу двойного слова (т.е. делиться на 4).
180
bpmb,bpmw,bpmd w <выражение> - аналогично для бряка на запись.
181
 
182
Список установленных точек останова можно просмотреть командой "bl", информацию
183
о конкретной точке останова можно получить с помощью "bl <номер>". Ненужные
184
точки останова удаляются командой "bc <номер>", временно ненужные можно
185
запретить командой "bd <номер>", когда они станут снова нужны, используйте
186
команду "be <номер>".
187
 
188
Замечания.
189
 
190
1. При отладке собственных программ можно вставлять в код инструкции
191
   int3 (обратите внимание на отсутствие пробела!). Такая инструкция вызывает
192
   исключение при нормальном запуске, что приведёт к завершению процесса,
193
   но при работе под отладчиком просто активизируется отладчик (с сообщением
194
   "int3 command at xxx"). Это позволяет не думать о том, какие адреса
195
   использовать в командах g и/или bp.
196
2. Весь вывод и весь ввод ориентирован на 16-ричную систему счисления.
197
3. Когда программа выполняется, окна регистров и данных показывают информацию,
198
   относящуюся к моменту до возобновления; установка значений регистров в
199
   этом режиме невозможна. Впрочем, команда "d" в этом режиме показывает
200
   информацию, верную в момент выдачи команды.
201
 
202
						diamond
203
						mailto:diamondz@land.ru