Я читаю книгу под названием «Hacking: искусство эксплуатации», и я наткнулся на этот пункт:execle() также определяет среду. Что это значит?
С execl(), используется существующая среда, но если вы используете execle(), в можно указать всю среду. Если массив окружения - это только код оболочки в качестве первой строки (с указателем NULL для завершения списка), то только переменная среды будет shellcode. Это делает его адрес легким для расчета. В Linux адрес будет 0xbffffffa, минус длина командного кода в среде, минус длина имени исполняемой программы . Поскольку этот адрес будет точным, нет необходимости в салазках NOP.
Что они означают, указав на окружающую среду?
Что классифицирует различные среды?
Почему адрес переменной окружения вычисляется таким образом (или, что конкретно, почему это базовый адрес 0xbffffffa)?
Если я использовал функцию execl() вместо execle(), могу ли я не использовать переменную среды shellcode?
Я думал, что переменная среды была системными переменными, которые вы могли видеть, введя «env» в терминале. Итак, зачем мне создавать этот массив? Я знаю, что существует функция «getenv()», которая вернет адрес переменной окружения. Так для чего это? – Shookie
@Shookie «Я думал, что переменная среды - это системные переменные, которые вы можете увидеть, набрав« env »в терминале». - они есть. «Так зачем мне создавать этот массив?» - вам не нужно. И это не имеет никакого отношения к 'getenv()'. Эта функция ** устанавливает ** переменные среды. –