FPC позволяет менять системную библиотеку?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Celestia
незнакомец
Сообщения: 3
Зарегистрирован: 21.11.2010 09:09:32

FPC позволяет менять системную библиотеку?

Сообщение Celestia »

Здравствуйте! Мне сказали что FPC позволяет менять системную библиотеки (kernel32, user32...), в том числе на практически полное их отсутствие, я хотел узнать правда ли это, если да, то как это реализовать? Мне нужно просто сделать так чтобы при запуске моей программы управление сразу передавалось на мой код begin ... end
Спасибо!
Kitayets
постоялец
Сообщения: 174
Зарегистрирован: 05.05.2010 21:15:24

Сообщение Kitayets »

задача не понятна.

скорее всего то что вы хотите невозможно. такое было возможно во времена DOS, в современных ОС всеми процессами управляет ядро - выделяются ресурсы, адресное пространство, стек, происходит поиск и подключение библиотек, к каждой программе присоединяется некий "пролог", загружаются ресурсы, код, данные, и т.д.. таким образом с момента "запуска" программы через некий интерфейс ОС (командная строка или explorer), до момента входа в блок begin.. end. происходит много чего и выполняется много кода, в том числе и из библиотек kernel32, user32... т.к. эти библиотеки суть интерфейс к ядру ОС Windows. и это поведение не зависит от среды разработки. попробуйте запустить свою программу в oledbg и многое (возможно) станет для Вас очевидно.
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Вам нужно переписать system.pp (и может 1-2 других системных модуля, в зависимости от целевой ОС и от версии компилятора) и скомпилировать его без использования RTL (есть там ключик у компилятора, не помню какой). Далее, при сборке приложения/библиотеки используется именно этот модуль (надо разобраться с путями, что бы брался ваш, а не стандартный). Можете посмотреть как реализован RTL для одной из множества ОСей (и делать по примеру). Минимальный такой системный модуль может в десяток другой строк уложиться. Но... у вас не будет не только WriteLn, но так же поддержки строк, вещественных чисел и очень много другого, включая управление кучей (выделение и освобождение памяти), ибо всё это реализовано в RTL (system.pp), а не магическим образом добавляется компилятором в результирующий бинарник.

p.s. Зависимость от системы контролируется полностью, я делал RTL для KolibriOS, но со сборкой в PE, никаких намёков на win32 в коде не сохранилась и проблем со сборкой и исполнением приложений не возникало.

..bw
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

bw
А какой минимум нужно реализовать в собственном System, чтобы скомпилировалось?
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

C FPC такими извращениями не занимался, но с DCC, действительно можно выкинуть все лишнее и впихнуть в 478 БАЙТ (!!!)
http://xproger.mentalx.org/old/?id=1&pa ... delphi_min
Аватара пользователя
Verx0Laz
постоялец
Сообщения: 125
Зарегистрирован: 11.09.2007 11:24:07

Сообщение Verx0Laz »

Celestia, тебе только-что ответили на твой вопрос, но, судя по формулировке твоего вопроса, тот, кто тебе его подсказал, врядли рассчитывал на то, что ответ существует :)))) Прикинь, а ответ есть :))
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

> А какой минимум нужно реализовать в собственном System, чтобы скомпилировалось?

Это вариант для Linux x86_64. Для i386 нужно заменить prt0.as (он был взят мной, без изменений, из сорцев RTL 2.2.4).
Это такой минимум, что даже модули не будут инициализироваться, насколько я понимаю.
Для win32 вместо prt0.as нужно использовать sysinitpas.pp. Собственно я так и работал когда-то, а вот для Linux пришлось разбираться вновь.

..bw
Вложения
puny-linux-64.tar.bz2
(2.02 КБ) 445 скачиваний
Ответить