Я просто пытался заставить переполнение буфера работать в OSX (10.6) в следующей программе; Мне нужно заставить foo выполнить переполнение буфера.
#include <string.h>
#include <stdio.h>
void foo() {
printf("hacked!");
}
int main(int argc, const char *argv[]) {
char s[100];
strcpy(s, argv[1]);
}
Я компилирую его как: -
$ gcc -o test test.c -arch i386
При дизассемблировании test
я получаю адрес foo
как 0x00001eda
. Эксплойт не работает должным образом; вероятно, потому что адрес возврата должен быть переполнен 0x00001eda
, содержащим \ x00
.
В случаях, когда целевой адрес имеет \ x00
, как можно использовать эксплойт переполнения буфера?