задача: есть две программы. допустим, что одна из них печатает "hello workd!", назовём её hw, цель фторой программы - exec_hw - размапить кл-во памяти равное размеру бинарника hw и скопировать контекст данного бинарника в размапленную область, далее сделать jump на размапленный адрес. в теории после такого джампа должна выполнится программа hw, если при вызове ф-ии mmap был передан флаг PROT_EXEC, на практике же я получаю sigfault(сигнал SIGSEGV).
NOTE: задача не имеет никакой практической подоплёки. её единственная цель - удовлетворение моего любопытства, так что не нужно предлагать мне убить себя об стену, завести девушку, использовать lisp, what ever else...
код:
int main(void)
{
...
void *code_ref; /* start address of mapped file */
int fd; /* our hw binary file descriptor */
char buf[DEF_BUF_SIZE]; /* DEF_BUF_SIZE = 512 */
size_t ex_size, wr_size, cur_msize = 0;
ex_size = get_ex_file_size(); /* just get file size using stat() */
if((code_ref = mmap(code_ref, ex_size, PROT_EXEC | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)) == NULL)
error("can't mmap hw!");
if((fd = open(EX_FILE_NAME, O_RDONLY)) < 0) /* EX_FILE_NAME = "./hw" */
error("can't open executable file!");
/* copy data from hw to maped memory */
while((wr_size = read(fd, buf, DEF_BUF_SIZE)) > 0) {
memmove(code_ref + cur_msize, buf, wr_size);
cur_msize += wr_size;
memset(buf, '\0', wr_size);
}
if(wr_size < 0)
error("can't read from executable file!\n");
close(fd);
__asm__("jmp *%0" : : "m" (code_ref)); /* jumping indeed */
...
exit(EXIT_SUCCESS);
}
может быть кто-нибудь знает в чём проблемма?

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от asgard

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум трейсинг malloc/free (2014)
- Форум date не читает /etc/localtime (2019)
- Форум mutt: Segmentation fault (core dumped) (2013)
- Форум [Golded+][Gentoo] Не запускается (2010)
- Форум Как узнать, сколько памяти доступно для выделения? (2005)
- Форум Не понимаю с mmap.. (2005)
- Форум почему сегфолтится програмка?? (2010)
- Форум C + random + array + segfault (2014)
- Форум Не запускается Опера (2007)
- Форум Valgrind для ARM (2012)