Пробую отладку, часть 3 (ассемблер Эльбрус)

Нашёл более удобный способ смотреть значения регистров в gdb.

Это команда display $<имя регистра>

В моём случае

(gdb) display $r1
1: $r1 = {dword = 65656, {tag0 = 0, tag1 = 0}}
(gdb) display $r2
2: $r2 = {dword = 131952, {tag0 = 0, tag1 = 0}}
(gdb) display $r3
3: $r3 = {dword = 0, {tag0 = 0, tag1 = 0}}
(gdb) display $ctpr3
4: $ctpr3 = {dword = 2161727821137838080, {ta_base = 0, ta_tag = 0, opc = 3,
ipd = 3}}
(gdb) display $wd
5: $wd = {dword = 274882102496, {base = 1248, size = 64, psize = 64, fx = 0}}
(gdb) display $ip
6: $ip = 65672

Плюс удобно, что при выполнении шага значения регистров сразу отображаются.

(gdb) si
0x0000000000010098 in _start ()
1: $r1 = {dword = 1, {tag0 = 0, tag1 = 0}}
2: $r2 = {dword = 2, {tag0 = 0, tag1 = 0}}
3: $r3 = {dword = 0, {tag0 = 0, tag1 = 0}}
4: $ctpr3 = {dword = 2161727821137838080, {ta_base = 0, ta_tag = 0, opc = 3, 
    ipd = 3}}
5: $wd = {dword = 274882101680, {base = 432, size = 64, psize = 64, fx = 0}}
6: $ip = 65688

Пройду дальше до конца

(gdb) si
0x00000000000100a0 in _start ()
1: $r1 = {dword = 1, {tag0 = 0, tag1 = 0}}
2: $r2 = {dword = 2, {tag0 = 0, tag1 = 0}}
3: $r3 = {dword = 3, {tag0 = 0, tag1 = 0}}
4: $ctpr3 = {dword = 2161727821137838080, {ta_base = 0, ta_tag = 0, opc = 3, 
    ipd = 3}}
5: $wd = {dword = 274882101696, {base = 448, size = 64, psize = 64, fx = 0}}
6: $ip = 65696
(gdb) si
0x00000000000100a8 in _start ()
1: $r1 = {dword = 1, {tag0 = 0, tag1 = 0}}
2: $r2 = {dword = 2, {tag0 = 0, tag1 = 0}}
3: $r3 = {dword = 3, {tag0 = 0, tag1 = 0}}
4: $ctpr3 = {dword = 2197756618156802048, {ta_base = 0, ta_tag = 2, opc = 3, 
    ipd = 3}}
5: $wd = {dword = 274882102464, {base = 1216, size = 64, psize = 64, fx = 0}}
6: $ip = 65704
(gdb) si

Program terminated with signal SIGKILL, Killed.
The program no longer exists.

К сожалению, посмотреть регистры на отдельной панели не получилось — выдаётся ошибка

(gdb) layout regs
Cannot enable the TUI: error opening terminal [TERM=xterm-256color]

Вывод содержимого памяти по адресу

(gdb) x/2i 0x10088
=> 0x10088 <_start+16>:
addd,0 0x0, 0x1, %dr1
addd,1 0x0, 0x2, %dr2

0x10098 <_start+32>:
addd,0 %dr1, %dr2, %dr3

Вывод ассемблерного кода функции

(gdb) disassemble _start
Dump of assembler code for function _start:
0x0000000000010078 <+0>:
setwd wsz = 0x4, nfx = 0x1, dbl = 0x0

=> 0x0000000000010088 <+16>:
addd,0 0x0, 0x1, %dr1
addd,1 0x0, 0x2, %dr2

0x0000000000010098 <+32>:
addd,0 %dr1, %dr2, %dr3

0x00000000000100a0 <+40>:
nop 5
return %ctpr3

0x00000000000100a8 <+48>:
ct %ctpr3
ipd 3

End of assembler dump.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *