2016-09-05 2 views

ответ

1

В командной строке gdb вы можете преобразовывать адреса в значения указателя.

(gdb) list 

1 #include <stdio.h> 
2 
3 char * m = "this is a test\n"; 
4   
5 main() 
6 { 
7  printf("%s",m); 
8 } 
(gdb) b 7 
Breakpoint 1 at 0x400531: file example.c, line 7. 
(gdb) r 
Starting program: /tmp/example 

Breakpoint 1, main() at example.c:7 
7  printf("%s",m); 
(gdb) p m 
$1 = 0x4005d4 "this is a test\n" 
(gdb) p *(char*)0x4005d4 
$2 = 116 't' 
(gdb) p *(int*)0x4005d4 
$3 = 1936287860 
(gdb) p *(double**)0x4005d4 
$5 = (double *) 0x2073692073696874 

Последние два мусора, конечно, поскольку значение является символом char *.

Команда дампа также полезна для просмотра шестнадцатеричного значения.

(gdb) x/20c m 
0x4005d4: 116 't' 104 'h' 105 'i' 115 's' 32 ' ' 105 'i' 115 's' 32 ' ' 
0x4005dc: 97 'a' 32 ' ' 116 't' 101 'e' 115 's' 116 't' 10 '\n' 0 '\000' 
0x4005e4: 37 '%' 115 's' 0 '\000' 0 '\000' 
+0

Это звучит не очень близко. Поддерживает ли GDB скрипты? –

+0

Да. Ниже приведен пример использования python, http://stackoverflow.com/questions/39069090/debugger-gdb-evaluate-expression/39132967#39132967. –

Смежные вопросы