как вставить Hex в качестве аргумента в GDB? (как arg, а не как stdin) - PullRequest
2 голосов
/ 07 мая 2020

Я хочу выполнить следующую команду bash, но на самом деле в gdb (чтобы я мог ее отлаживать):

myProgram "`echo -en '\x41\x41\x41\x41'`"

Я пытаюсь сделать это (в gdb):

(dbg) run "`echo -en "\x41\x41\x41\x41"`"

Я НЕ имею в виду перенаправление stdin:

echo -en "\x41\x41\x41\x41" > command_output.txt
gdb myProgram
(gdb) run < command_output.txt

как вставить шестнадцатеричные значения в качестве дополнения к программе в gdb?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Команда gdb set args может устанавливать аргументы. Используя eval, который пропускает свои аргументы через printf, мы можем вставлять почти произвольные символы, используя шестнадцатеричные escape-символы. (Мы ограничены тем фактом, что gdb обычно вызывает цель с помощью оболочки, поэтому это помогает добавлять одинарные кавычки вокруг каждого аргумента).

(gdb) eval "set args '%s'", "\x41\x41\x20\x41"
You can't do that without a process to debug.

Это еще одно ограничение gdb. Альтернативой, которая не заставляет gdb выделять память в целевом объекте, является предоставление eval только %c преобразований и целочисленных аргументов, например:

(gdb) eval "set args '%c%c%c%c'", 0x41, 0x41, 0x20, 0x41

Но необходимо указать точное число %c преобразование в эту строку формата утомительно, поэтому давайте придерживаться единственного %s. Нам нужно запустить процесс, хотя мы собираемся перезапустить его сразу после того, как мы установили аргументы с помощью eval.

(gdb) start
Starting program: /home/mp/argprint

Temporary breakpoint 1, main (argc=1, argv=0x7ffffffee2b8) at argprint.c:4
4               for(int i=0; i < argc; i++) {

(gdb) eval "set args '%s'", "\x41\x41\x20\x41"
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/mp/argprint 'AA A'
arg 0 is <</home/mp/argprint>>
arg 1 is <<AA A>>

Если у вас есть старый gdb, в котором нет команды eval, но есть есть Python, можно так:

(gdb) python gdb.execute("set args '\x41\x41\x20\x41'")
0 голосов
/ 07 мая 2020

можете попробовать

(dbg) run $(echo -en "\x41\x41\x41\x41")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...