-
Подскажите, как сделать такой exe, файл который может быть запущен и как exe, и присоединен как dll? Причем как dll он должен только выполнить DllMain и всё. Экспорт не нужен.
-
exe с параметрами в командной строке.
-
> dmk © (25.01.17 19:39) [1]
Основная проблема в том, что нельзя указать DllMain, если компилируешь "program", а не "library".
-
А если скомпилировать пустой экзешник, загрузить его аки библиотеку и по значениям системных переменных определить, что запуск файла как экзешника отличается от загрузки как библиотеки?
-
Никак
-
Dllmain - это ЕР, она у РЕ образа может быть только одна.
-
Единственно ты можешь на точке входа определить что мы есть рут и передать управление не на инициализацию приложения, а на свою собственную dllmain, кастомную, ессесно
-
> Игорь Шевченко © (26.01.17 10:29) [4] > Никак
Я так и понял.
> Rouse_ © (26.01.17 11:20) [5] > Dllmain - это ЕР, она у РЕ образа может быть только одна.
и для LoadLibrary('....exe') она не вызывается (как и инициализация импорта).
Поэтому я решил пойти по простому пути, сделаю просто запуск через rundll32.
-
не ну дернуть то можно и без загрузчика:
procedure CallEP(Instance: NativeUInt); var DOSHeader: PImageDosHeader; NTHeader: PImageNtHeaders; begin DOSHeader := PImageDosHeader(Instance); NTHeader := PImageNtHeaders(ULONG_PTR(DOSHeader) + ULONG_PTR(DOSHeader^._lfanew)); TDllProc(NTHeader^.OptionalHeader.AddressOfEntryPoint + Instance)(0); end;
begin CallEP(LoadLibrary('dll.exe'));
другое дело что этот образ нужно правильно проинициализировать.
|