Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Стартовая функция 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.032 c
14-1089295635
gn
2004-07-08 18:07
2004.07.25
патент на тело:ни шагу без некрасофта


1-1089757540
Петр
2004-07-14 02:25
2004.07.25
как в Timage вставить gif?


1-1089704487
Lamerr
2004-07-13 11:41
2004.07.25
TChart.SaveChartToFile...


8-1083819071
Kerget Ruslan
2004-05-06 08:51
2004.07.25
Проблемы при работе с TShockwaveFlash


1-1089530502
Islander
2004-07-11 11:21
2004.07.25
Как получить текущую модальную форму?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский