Comments 8
Белые пятна — это, по всей видимости, локальные переменные и аргументы функций стартап-кода си-библиотеки.
В случае libc это будут _start и __libc_start_main
Платформенно-зависимая _start:
x86_64
i386
и т.п. для других платформ
и независимая часть в __libc_start_main:
libc-start.c
Возможно и gdb покажет больше с отладочной версией libc
В случае libc это будут _start и __libc_start_main
Платформенно-зависимая _start:
x86_64
i386
и т.п. для других платформ
и независимая часть в __libc_start_main:
libc-start.c
Возможно и gdb покажет больше с отладочной версией libc
Посмотрел, спасибо, там, как раз самое интересное оказывается :)
Сделал небольшой стековерфло :). В тексте тоже подправлю.
Сделал небольшой стековерфло :). В тексте тоже подправлю.
#include <stdio.h>
void **ret;
void *leave;
void foo(){
void (*boo)(void); //указатель на функцию
printf("Stack rewrite!\n");
boo = (void (*)(void))leave;
boo(); // fini()
}
int main(int argc, char *argv[], char *envp[]) {
int a[123] = {0};
unsigned long int mark = 0xbfbfbfbfbfbfbfbf; //метка, от которой будем работать
ret = (void**)(&mark+2); // извлекаем адрес, функции, вызываемой после завершения (fini)
leave = *ret; // запоминаем
*ret = (void*)foo; // перетираем
return 0; // вызов функции foo()
}
Вместо Denwer читать, конечно же, Darwin.
А еще валиден такой код
int main[] = {1, 2, 3};
Sign up to leave a comment.
Несколько подробностей о функции main