установить переменную среды в GDB из вывода команды

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

set environment username = test

Однако мне нужно передать специальные символы переменной имени пользователя, поэтому мне нужно сделать что-то вроде:

set environment username= $(echo -e '\xff\x4c......')

Но эта команда не выполняется, а переменная имени пользователя содержит буквально то, что я написал, знает ли кто-нибудь трюк для передачи специальных символов в переменную среды?


person imaibou    schedule 11.01.2016    source источник
comment
См. Также: stackoverflow.com/q/55593045/94687   -  person imz -- Ivan Zakharyaschev    schedule 06.03.2020


Ответы (2)


Что ж, если вам действительно нужно сделать это из GDB, вот один пример:

hello.c

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv) {
    printf("argv[1]=%s\n", argv[1]);
    printf("VAR=%s\n", getenv("VAR"));
    return 0;
}

Пример:

$ gcc -g -o hello hello.c
$ gdb ./hello
...
(gdb) set exec-wrapper bash -c 'exec env VAR="`echo myEnv`" "$@"' --
(gdb) r myArg
...
argv[1]=myArg
VAR=myEnv

Измените VAR и echo myEnv на нужную вам переменную и команду.


Но обратите внимание, что установка VAR из оболочки перед запуском GDB также работает:

$ VAR=`echo Hey there` gdb ./hello
...
(gdb) r myArg
...
argv[1]=myArg
VAR=Hey there
person gavv    schedule 11.01.2016

При запуске gdb из командной строки оболочки вы можете указать, какую программу запускать, с какими аргументами (с --args) и даже изменить окружение программы с помощью env!

Я только что успешно сделал вот так:

gdb --ex=run --args env LD_BIND=now LD_DEBUG=libs \
apt-get install --yes $(cat pkgs-to-install-to-crash-apt)

--ex=run - это попросить GDB запустить его немедленно.

person imz -- Ivan Zakharyaschev    schedule 06.03.2020