The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Попытка реализовать собственный exec в userspace, Павел Отредиез (?), 02-Янв-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


5. "Попытка реализовать собственный exec в userspace"  +/
Сообщение от Аноним (5), 05-Янв-20, 03:52 
> Родительская программа mmap'ит исполняемый файл и легко найти в дочерней int main
> и вызвать. Пока в int main не обращаются к данным, а
> содержатся только команды, все естественно выполняется. Как увидеть дочерней программе
> её сегмент данных.

В OpenBSD последних версий по умолчанию используется PIE, это отчасти жизнь должно упрощать: read-only константы могут жить внутри свободно релоцируемого сегмента кода, и проблемы нет.

Но могут и не жить, плюс Но если я правильно понимаю задачу, вам нужно выполнить работу ld.so и ручками настроить таблицу смещений, да ещё и регистр процессора в нужное (не помню, кто там на amd64 зарезервирован под PIC) значение выставить.

Ну и это, вы сначала используйте PROT_READ|PROT_WRITE, а потом меняйте на PROT_READ|PROT_EXEC. Ну или придётся собирать с флагом компоновщика -z wxneeded, и запускать на ФС с wxallowed. Но лучше всё-таки по-человечески написать код. ;)

Ответить | Правка | Наверх | Cообщить модератору

6. "Попытка реализовать собственный exec в userspace"  +/
Сообщение от Павел Отредиезemail (?), 06-Янв-20, 12:42 
>[оверквотинг удален]
> В OpenBSD последних версий по умолчанию используется PIE, это отчасти жизнь должно
> упрощать: read-only константы могут жить внутри свободно релоцируемого сегмента кода,
> и проблемы нет.
> Но могут и не жить, плюс Но если я правильно понимаю задачу,
> вам нужно выполнить работу ld.so и ручками настроить таблицу смещений, да
> ещё и регистр процессора в нужное (не помню, кто там на
> amd64 зарезервирован под PIC) значение выставить.
> Ну и это, вы сначала используйте PROT_READ|PROT_WRITE, а потом меняйте на PROT_READ|PROT_EXEC.
> Ну или придётся собирать с флагом компоновщика -z wxneeded, и запускать
> на ФС с wxallowed. Но лучше всё-таки по-человечески написать код. ;)

Спасибо. Сейчас курю elf.h.


Ответить | Правка | Наверх | Cообщить модератору

7. "Попытка реализовать собственный exec в userspace"  +/
Сообщение от Павел Отредиезemail (?), 24-Янв-20, 17:59 
>[оверквотинг удален]
> В OpenBSD последних версий по умолчанию используется PIE, это отчасти жизнь должно
> упрощать: read-only константы могут жить внутри свободно релоцируемого сегмента кода,
> и проблемы нет.
> Но могут и не жить, плюс Но если я правильно понимаю задачу,
> вам нужно выполнить работу ld.so и ручками настроить таблицу смещений, да
> ещё и регистр процессора в нужное (не помню, кто там на
> amd64 зарезервирован под PIC) значение выставить.
> Ну и это, вы сначала используйте PROT_READ|PROT_WRITE, а потом меняйте на PROT_READ|PROT_EXEC.
> Ну или придётся собирать с флагом компоновщика -z wxneeded, и запускать
> на ФС с wxallowed. Но лучше всё-таки по-человечески написать код. ;)

Спасибо за наводки. Вопрос раскурен и реализован. Ответ - надо выполнить все relocations elf файла. При этом формируется и BSS область для программы.


Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру