В связи с
viewtopic.php?f=10&t=370&start=195#p63430
viewtopic.php?f=33&t=3388#p66177
viewtopic.php?f=33&t=735&start=15#p49131
мне тоже стало интересно
поизвращаться запустить в
KolibriOS через
PELoad приложение, использующее
KolibriOS API, созданное в
Delphi7.
Пришлось сначала подредактировать
PELoad.
Теперь этот
PELoad не обрабатывает импорт, он только грузит
PE.
По идее надо изменить и перекомпилировать всякие там
System,
SysInit, ... . Но мне лень это всё делать.
Если скомпилировать такой проект
Code: Select all
Program Project1;
Procedure Main(); Begin End;
Begin Main; end.
то в начале происходит вызов
InitExe из
SysInitCode: Select all
55 push ebp
8bec mov ebp, esp
83c4f0 add esp, -10h
b870334000 mov eax, 00403370h
e828ffffff call @InitExe
e89fffffff call Main
e852faffff call @Halt0
Так как разбираться с
SysInit мне было лень, то я просто прыгну на вызов
Main.
Если посчитать от точки входа, то до вызова
Main 16 байт. Для
$APPTYPE CONSOLE немного по-другому, там смещение 24.
В
PELoad это
MAGIC_OFFSETCode: Select all
MAGIC_OFFSET equ 16 ; Hack For Delphi7 {$APPTYPE GUI}
; MAGIC_OFFSET equ 24 ; Hack For Delphi7 {$APPTYPE CONSOLE}
и потом ниже вот так он используется
Code: Select all
; Go To EntryPoint
mov eax, [EntryPoint]
add eax, IMAGE_BASE + MAGIC_OFFSET
jmp eax
Чтобы это смещение не приходилось пересчитывать каждый раз, не нужно писать ничего перед вызовом
Main.
Чтобы скомпилировать какой-нибудь пример, можно даже открыть
Project1.dpr в
Delphi IDE и нажать
Ctrl+F9
Для тех, кому всё же ещё хочется использовать
KlbrInWin — это тоже можно сделать.
Запускаем
KlbrInWin, запускаем в нём
PELoad, в котором запускаем
Project1.exe