Здравствуйте! Мне сказали что FPC позволяет менять системную библиотеки (kernel32, user32...), в том числе на практически полное их отсутствие, я хотел узнать правда ли это, если да, то как это реализовать? Мне нужно просто сделать так чтобы при запуске моей программы управление сразу передавалось на мой код begin ... end
Спасибо!
FPC позволяет менять системную библиотеку?
Модератор: Модераторы
задача не понятна.
скорее всего то что вы хотите невозможно. такое было возможно во времена DOS, в современных ОС всеми процессами управляет ядро - выделяются ресурсы, адресное пространство, стек, происходит поиск и подключение библиотек, к каждой программе присоединяется некий "пролог", загружаются ресурсы, код, данные, и т.д.. таким образом с момента "запуска" программы через некий интерфейс ОС (командная строка или explorer), до момента входа в блок begin.. end. происходит много чего и выполняется много кода, в том числе и из библиотек kernel32, user32... т.к. эти библиотеки суть интерфейс к ядру ОС Windows. и это поведение не зависит от среды разработки. попробуйте запустить свою программу в oledbg и многое (возможно) станет для Вас очевидно.
скорее всего то что вы хотите невозможно. такое было возможно во времена DOS, в современных ОС всеми процессами управляет ядро - выделяются ресурсы, адресное пространство, стек, происходит поиск и подключение библиотек, к каждой программе присоединяется некий "пролог", загружаются ресурсы, код, данные, и т.д.. таким образом с момента "запуска" программы через некий интерфейс ОС (командная строка или explorer), до момента входа в блок begin.. end. происходит много чего и выполняется много кода, в том числе и из библиотек kernel32, user32... т.к. эти библиотеки суть интерфейс к ядру ОС Windows. и это поведение не зависит от среды разработки. попробуйте запустить свою программу в oledbg и многое (возможно) станет для Вас очевидно.
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
Вам нужно переписать system.pp (и может 1-2 других системных модуля, в зависимости от целевой ОС и от версии компилятора) и скомпилировать его без использования RTL (есть там ключик у компилятора, не помню какой). Далее, при сборке приложения/библиотеки используется именно этот модуль (надо разобраться с путями, что бы брался ваш, а не стандартный). Можете посмотреть как реализован RTL для одной из множества ОСей (и делать по примеру). Минимальный такой системный модуль может в десяток другой строк уложиться. Но... у вас не будет не только WriteLn, но так же поддержки строк, вещественных чисел и очень много другого, включая управление кучей (выделение и освобождение памяти), ибо всё это реализовано в RTL (system.pp), а не магическим образом добавляется компилятором в результирующий бинарник.
p.s. Зависимость от системы контролируется полностью, я делал RTL для KolibriOS, но со сборкой в PE, никаких намёков на win32 в коде не сохранилась и проблем со сборкой и исполнением приложений не возникало.
..bw
p.s. Зависимость от системы контролируется полностью, я делал RTL для KolibriOS, но со сборкой в PE, никаких намёков на win32 в коде не сохранилась и проблем со сборкой и исполнением приложений не возникало.
..bw
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
bw
А какой минимум нужно реализовать в собственном System, чтобы скомпилировалось?
А какой минимум нужно реализовать в собственном System, чтобы скомпилировалось?
- *vmr
- постоялец
- Сообщения: 168
- Зарегистрирован: 08.01.2007 00:46:07
- Откуда: Киев
- Контактная информация:
C FPC такими извращениями не занимался, но с DCC, действительно можно выкинуть все лишнее и впихнуть в 478 БАЙТ (!!!)
http://xproger.mentalx.org/old/?id=1&pa ... delphi_min
http://xproger.mentalx.org/old/?id=1&pa ... delphi_min
Celestia, тебе только-что ответили на твой вопрос, но, судя по формулировке твоего вопроса, тот, кто тебе его подсказал, врядли рассчитывал на то, что ответ существует
))) Прикинь, а ответ есть
)
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
> А какой минимум нужно реализовать в собственном System, чтобы скомпилировалось?
Это вариант для Linux x86_64. Для i386 нужно заменить prt0.as (он был взят мной, без изменений, из сорцев RTL 2.2.4).
Это такой минимум, что даже модули не будут инициализироваться, насколько я понимаю.
Для win32 вместо prt0.as нужно использовать sysinitpas.pp. Собственно я так и работал когда-то, а вот для Linux пришлось разбираться вновь.
..bw
Это вариант для 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 скачиваний
