Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Стартовая функция exe файла, созданного дельфи.   Найти похожие ветки 

 
Тимохов ©   (2004-07-06 18:51) [0]

Вопрос такой.
Читал тут Фень Юаня.
В самом начале странице на 10 он приводит код подмены функции WinMainCtrStartup.

Код примерно такой

extern "C" void WinMainCRTStartup()
{
 HDC hDC = GetDC(NULL);
 assert(hDC);

 CenterText(hDC, GetSystemMetrics(SM_CXSCREEN) / 2,
   GetSystemMetrics(SM_CYSCREEN) / 2,
   szFace, szMessage, 72);

 ReleaseDC(NULL, hDC);
 ExitProcess(0);
}


Т.е. его слова такие
Lots of things happen before WinMain is called in the actual program startup routine WinMainCRTStartup

Насколько я понимаю, он говорит о том, что можно экспортировать указанную функцию и будет свой загрузчик, который может вообще winmain не вызывать.

ВОПРОС. Где в дельфи загрузочная функция? Если _InitExe, то какое вообще это все имеет отношение к WinMainCTRStartUp? Или это только в сях есть такая функция?


 
Mystic ©   (2004-07-06 19:21) [1]

Начнем с банальностей.

Форматом PE предусмотрен специальный адрес, называемый EntryPoint, куда передается управление после загрузки EXE. Каждый из компиляторов, обычно, начинает по этому адресу некую функцию, которая выполняет инициализацию и передает управление собственно программе пользователя.

В Delphi первой вызывается вся же неявная функция program (begin и end основной программы). Только в перед (или после) begin неявно происходит вызов _InitEXE (с передачей ей в EAX параметра)

При желании, System.pas можно перекомпилировать и вставить что-то свое... В других компиляторах идея та же, только использованы свои соглашения об именах.


 
Тимохов ©   (2004-07-06 19:25) [2]


> Mystic ©   (06.07.04 19:21) [1]

т.е. про WinMainCRTStartup это ерунда?

Но вроде код Фень Юаня работает без всякого winmain.

Правильно я понимаю, что вы имеете в виду, что WinMainCRTStartup есть абсолютная специфика имеено сей и в дельфях вместо нее используется другая фукнция _InitExe?

ЗЫ. Где про это почитать? Особенно про РЕ?


 
Mystic ©   (2004-07-08 12:56) [3]

Скорее всего (я не гарантирую), это специфика VC++. Точнее, загрузчика консольных программ. Скажем, в MSDN описания этой функции я не нашел. У каждого компилятора (или, может быть точнее, компоновщика) в этом плане своя специфика. К сожалению, авторы многих книг по программированию под Windows предпочитают схему, при которой под C++ надо понимать MSVC++, а других компиляторов и средств разработки как бы нет в природе.


 
Тимохов ©   (2004-07-08 12:58) [4]


>  а других компиляторов и средств разработки как бы нет в
> природе.

эттто точно.
удивился бы очень если бы увидел книгу Рихтера на дельфи :))

Проблема еще в том, что дока msdn очень переплетена в msvc++. Мне честно говоря пока не хватает опыта иногда понять - к сям это относится или к windows :(((


 
Игорь Шевченко ©   (2004-07-08 13:14) [5]


> Проблема еще в том, что дока msdn очень переплетена в msvc++.
>


????

Разумеется, документация по Visual Studio там присуствует в полном объеме, но никто и не говорил, что MS должна вставлять в Microsoft Developer Network описания других средств разработки.


> что вы имеете в виду, что WinMainCRTStartup есть абсолютная
> специфика имеено сей


WinMainCRTStartup есть специфика Run-time Library. В данном случае, Runtime Library MSVC (даже без ++)


> В Delphi первой вызывается вся же неявная функция program
> (begin и end основной программы). Только в перед (или после)
> begin неявно происходит вызов _InitEXE (с передачей ей в
> EAX параметра)


А перед или после ? :)


 
Sergey_Masloff   (2004-07-08 13:30) [6]

Тимохов ©   (06.07.04 19:25) [2]
>Правильно я понимаю, что вы имеете в виду, что >WinMainCRTStartup есть абсолютная специфика имеено сей
Ну, насколько я понимаю CRT явно указывает что это C Run Time library
и конечно к D отношения не имеет


 
Sergey_Masloff   (2004-07-08 13:31) [7]

А Юань оказался классной книжкой, я даже не ожидал... Тоже сейчас читаю.


 
Тимохов ©   (2004-07-08 13:33) [8]


> А Юань оказался классной книжкой, я даже не ожидал... Тоже
> сейчас читаю.

Книга то хорошая, но я если что - не понимаю, не могу дальше читать.

Очень заинтересовал его пример с подменой стартовой функции.

Хотелось бы и такое в делфьи сделать.


 
pasha_golub ©   (2004-07-08 13:35) [9]

Вопрос стандартный: Юань в электронном виде есть?


 
wal ©   (2004-07-08 13:36) [10]


> Ну, насколько я понимаю CRT явно указывает что это C Run
> Time library

Скорее всего Вы понимаете не правильно, я это понял так, что в этой функции выполняется некая инициализация для работы с консольным приложением.

С уважением


 
Игорь Шевченко ©   (2004-07-08 13:38) [11]

wal ©   (08.07.04 13:36)

WinMainCRTStartup - функция инициализации С-шной библиотеки времени выполнения для оконных приложений.

С уважением,


 
Тимохов ©   (2004-07-08 13:40) [12]


> pasha_golub ©   (08.07.04 13:35) [9]

на английском есть.


 
Nous Mellon ©   (2004-07-08 13:57) [13]


> ЗЫ. Где про это почитать? Особенно про РЕ?

На wasm.ru есть цикл уроков по формату PE.
Да и еще там же есть интересно-познавательная статья PE с нуля.
Возможно, вам будет интересно :)


 
Ega23 ©   (2004-07-08 14:00) [14]

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)

Блин....


 
Тимохов ©   (2004-07-08 14:01) [15]

это к чему?


 
pasha_golub ©   (2004-07-08 14:03) [16]

Тимохов ©   (08.07.04 13:40) [12]
Буду очень рад и благодарен. Меня давно уже англицкий не пужает! :0)


 
Тимохов ©   (2004-07-08 14:08) [17]


> pasha_golub ©   (08.07.04 14:03) [16]

почта


 
Ega23 ©   (2004-07-08 14:10) [18]

это к чему?

Да я как раз сейчас этой дрянью занимаюсь...


 
Игорь Шевченко ©   (2004-07-08 14:18) [19]

Ega23 ©   (08.07.04 14:10)


> Да я как раз сейчас этой дрянью занимаюсь...


Суровое занятие, удачи! С отладкой разобрался ?


 
pasha_golub ©   (2004-07-08 14:26) [20]

Тимохов ©   (08.07.04 14:08) [17]
В анкете или pavel.golub@farata.kr.ua

Заранее спасибо. ;0)


 
Igorek ©   (2004-07-08 14:32) [21]

Тимохов ©   (08.07.04 14:08) [17]
И мне.
igor_orobchuk at yahoo co uk


 
Ega23 ©   (2004-07-08 14:41) [22]

Суровое занятие, удачи! С отладкой разобрался ?

Не-а, вообще засада полная... Сижу, втыкаюсь...



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.041 c
14-1089025394
Cosinus
2004-07-05 15:03
2004.07.25
Необходимость "is"...


14-1089036311
Igorek
2004-07-05 18:05
2004.07.25
begin/end в начале/конце процедуры необязательные


1-1089176228
pupus
2004-07-07 08:57
2004.07.25
Лаба по искусственному интеллекту


4-1087307435
FlyDragon
2004-06-15 17:50
2004.07.25
Размер рисунка


1-1089555687
Crypter
2004-07-11 18:21
2004.07.25
Быстрая работа с TRichEdit