Поиск переменных среды в ассемблере

#assembly #gdb #environment-variables

#сборка #gdb #переменные среды

Вопрос:

Я пытаюсь использовать переполнение буфера для назначения, и мне нужно получить доступ к переменным среды (прочитать одну из них), но я понятия не имею, где их искать. Я использую gdb для проверки памяти, но я просто не могу найти переменные среды.

Ответ №1:

Существует глобальная переменная ( char **environ ), которая должна существовать в таблице символов исполняемого файла, если она была скомпилирована с -g опцией.

Ответ №2:

Я надеюсь, что со временем вы нашли. Переменные среды хранятся в регистре esp, например, в моем текущем упражнении я могу показать переменные среды с помощью этой команды (starti используется для прерывания при первой инструкции):

 (gdb) starti
(gdb) x/50s $esp 450
  

Комментарии:

1. Начало переменных env в стеке находится прямо над аргументами командной строки. Итак, при запуске процесса, pop ecx (load argc ) / lea edx, [esp ecx*4 4] чтобы получить указатель на первую запись массива env. (Одна после нулевого указателя, который завершается argv[] ). Это, конечно, предполагает систему i386 V ABI, например, для Linux. В других операционных системах при запуске процесса вещи могут располагаться в разных местах. (Но все равно может быть передан main третий аргумент, char *envp[] )