Форум: "Потрепаться";
Текущий архив: 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