#assembly #gdb #environment-variables
#сборка #gdb #переменные среды
Вопрос:
Я пытаюсь использовать переполнение буфера для назначения, и мне нужно получить доступ к переменным среды (прочитать одну из них), но я понятия не имею, где их искать. Я использую gdb для проверки памяти, но я просто не могу найти переменные среды.
Ответ №1:
Существует глобальная переменная ( char **environ
), которая должна существовать в таблице символов исполняемого файла, если она была скомпилирована с -g
опцией.
Ответ №2:
Я надеюсь, что со временем вы нашли. Переменные среды хранятся в регистре esp, например, в моем текущем упражнении я могу показать переменные среды с помощью этой команды (starti используется для прерывания при первой инструкции):
(gdb) starti
(gdb) x/50s $esp 450
Комментарии:
1. Начало переменных env в стеке находится прямо над аргументами командной строки. Итак, при запуске процесса,
pop ecx
(loadargc
) /lea edx, [esp ecx*4 4]
чтобы получить указатель на первую запись массива env. (Одна после нулевого указателя, который завершаетсяargv[]
). Это, конечно, предполагает систему i386 V ABI, например, для Linux. В других операционных системах при запуске процесса вещи могут располагаться в разных местах. (Но все равно может быть переданmain
третий аргумент,char *envp[]
)