2010-07-22 4 views
62

Я знаю, что мы можем использовать несколько команд для доступа и чтения памяти: например, print, p, x ...Как изменить содержимое памяти с помощью GDB?

Но как я могу изменить содержимое памяти в любом конкретном месте (при отладке в GDB) ?

+0

напишите строку в памяти: http://stackoverflow.com/questions/19503057/in-gdb-how-can-i-write-a-string-to-memory –

ответ

87

Простейшим устанавливает переменную программы (см GDB: assignment):

(gdb) l 
6  { 
7   int i; 
8   struct file *f, *ftmp; 
9 
(gdb) set variable i = 10 
(gdb) p i 
$1 = 10 

Или вы можете просто обновить произвольную (перезаписываемый) местоположение по адресу:

(gdb) set {int}0x83040 = 4 

Там больше. Прочитано the manual.

+4

Мне нужно установить программную переменную BEFORE доступ к произвольным ячейкам памяти? Не могу ли я сразу запустить вторую команду? – Spidey

+4

Да, вы можете запустить вторую команду set без первой. –

25

Как сказал Николай, вы можете использовать команду gdb 'set', чтобы изменить значение переменной.

Вы также можете использовать команду 'set' для изменения местоположения памяти. например. Расширение на примере Николая:

(gdb) l 
6  { 
7   int i; 
8   struct file *f, *ftmp; 
9 
(gdb) set variable i = 10 
(gdb) p i 
$1 = 10 

(gdb) p &i 
$2 = (int *) 0xbfbb0000 
(gdb) set *((int *) 0xbfbb0000) = 20 
(gdb) p i 
$3 = 20 

Это должно работать для любого действительного указателя, и может быть приведено к любому соответствующему типу данных.

10

Расширение ответов на предоставленные здесь ответы.

Вы можете просто сделать set idx = 1, чтобы установить переменную, но этот синтаксис не рекомендуется, так как имя переменной может столкнуться с установленной подкомандой. В качестве примера set w=1 недействителен.

Это означает, что вы предпочитаете синтаксис: set variable idx = 1 или set var idx = 1.

Последнее, но не менее важное: вы можете просто использовать свою надежную старую команду печати, так как она оценивает выражение. Единственное отличие состоит в том, что он также печатает результат выражения.

(gdb) p idx = 1 
$1 = 1 

Вы можете узнать больше о gdb here.

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