Я пытаюсь научиться выполнять shellcode изнутри программы, но я не могу получить даже самый базовый код для запуска. Следующий код просто должен выйти из терминала, когда он запущен:Кастинг символьной строки как функции
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/mman.h>
char exitcode[] = "\xb0\x01\x31\xdb\xcd\x80";
int main() {
int (*func)();
func = (int (*)())exitcode;
(int)(*func)();
return 0;
}
Но все это я получаю выдаёт ошибку сегментации. GDB говорит, что это происходит, когда программа обращается к ячейке памяти exitcode [at (int) (* func)(); ], но я не уверен, почему это вызывает проблему. Я запускаю 64-битную ОС Linux Mint. Любая помощь приветствуется.
Если память для шеллкода находится в неисполняемом регионе, тогда это не сработает. Большинство современных операционных систем, вероятно, этого не допустят. Вы также должны убедиться, что шелл-код правильный для вашей архитектуры. –
Это для C или C++? Семантика и возможные ответы могут различаться. – Olaf
Приведение указателя объекта к указателю на функцию _undefined behaviour_. Все может случиться – Olaf