Есть .exe, у него есть точка входа - функция start. Судя по листингу дизассемблирования на у неё есть ряд параметров. Приложение имеет GUI интерфейс и далее управление передаётся на WinMain. Вопрос в том, а где посмотреть какие параметры start() принимает от системы, как вот в DllEntryPoint() я знаю что передаётся.
Код (Text): /*** *BaseProcessStartup(PVOID Peb) * *Purpose: * This routine does the C runtime initialization, calls main(), and * then exits. It never returns. * *Entry: * PVOID Peb - pointer to Win32 Process Environment Block (not used) * *Exit: * This function never returns. * *******************************************************************************/
Передается не NULL, а указатель на PEB (Process Environment Block). Функция в crt0.c (исходники сишной библиотеки).
Понял. К сожалению, мне нужно запустить код, который был откомпилирован как exe и содержащий start(), но теперь этот код находится в отдельной dll. Не подскажите как можно по минимуму заполнить поля этого PEB, что бы "обмануть" функцию.. где поля почитать? Дайтие ключики к MSDN. А-а... да действительно, код узнаю. В IDA он прям цветным по чёрному точь в точь. P.S. Нашёл, ёо. А нельзя ли у текущего процесса взять копию этого блока? Хотя мне, наверное нужно думать в сторону (Thread Environment Block). Там видно будет.
зачем тебе трогать этот блок? стартовой функцией он не используется. Если твой стартовый код в dll, то он будет получать такие же параметры как DllEntryPoint()
rmn Если EP экзешника теперь стал EP динамической библиотеки, он и вызываться будет минимум 2 раза на старте. Поэтому работать прога не будет. uni Может быть, его вообще вызывать не надо?
Нет, DllEntryPoint я там написал сам. Я переделал один exe файл в dll, чтобы использовать его функциональность. exe содержит интерфейс. Я пока отключил его (не передавая управление на start). DllEntryPoint() я сам внедрил, добавив к секции кода. Мне нужно было, чтобы этот exe был dll'кой и экспортировал функции некоторые из себя. Я создал таблицу экспорта, нашел функции ...короче целоя эпопея. Тут в RESEARCH exe->dll пост. Так вот, мне нужно ещё запустить интерфейс в отдельном потоке в этом же процессе, чтобы ещё интерфейс появился. Хорошо, что PEB не используется, теперь я могу написать CreateThread и подсунуть ему точку start(). Спасибо.