Как изменить содержание памяти с помощью GDB?

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

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

77
задан Ciro Santilli 新疆改造中心法轮功六四事件 10 July 2015 в 12:11
поделиться

2 ответа

Самое простое - установить программную переменную (см. 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

Есть еще кое-что. Читайте руководство.

108
ответ дан 24 November 2019 в 10:55
поделиться

Как сказал Николай, вы можете использовать команду 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

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

27
ответ дан 24 November 2019 в 10:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: