какие параметры передаются на точку входа (?, +)

Тема в разделе "WASM.WIN32", создана пользователем uni, 20 дек 2006.

  1. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Есть .exe, у него есть точка входа - функция start. Судя по листингу дизассемблирования на у неё есть ряд параметров. Приложение имеет GUI интерфейс и далее управление передаётся на WinMain. Вопрос в том, а где посмотреть какие параметры start() принимает от системы, как вот в DllEntryPoint() я знаю что передаётся.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Код (Text):
    1. /***
    2. *BaseProcessStartup(PVOID Peb)
    3. *
    4. *Purpose:
    5. *       This routine does the C runtime initialization, calls main(), and
    6. *       then exits.  It never returns.
    7. *
    8. *Entry:
    9. *       PVOID Peb - pointer to Win32 Process Environment Block (not used)
    10. *
    11. *Exit:
    12. *       This function never returns.
    13. *
    14. *******************************************************************************/
     
  3. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Т.е. получается, что NULL что-ли передаётся? А откуда отрывок (не могу его найти)?
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Передается не NULL, а указатель на PEB (Process Environment Block).
    Функция в crt0.c (исходники сишной библиотеки).
     
  5. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Понял. К сожалению, мне нужно запустить код, который был откомпилирован как exe и содержащий start(), но теперь этот код находится в отдельной dll. Не подскажите как можно по минимуму заполнить поля этого PEB, что бы "обмануть" функцию.. где поля почитать? Дайтие ключики к MSDN.
    А-а... да действительно, код узнаю. В IDA он прям цветным по чёрному точь в точь.

    P.S. Нашёл, ёо. А нельзя ли у текущего процесса взять копию этого блока? Хотя мне, наверное нужно думать в сторону (Thread Environment Block). Там видно будет.
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    зачем тебе трогать этот блок? стартовой функцией он не используется.
    Если твой стартовый код в dll, то он будет получать такие же параметры как DllEntryPoint()
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rmn
    Если EP экзешника теперь стал EP динамической библиотеки, он и вызываться будет минимум 2 раза на старте. Поэтому работать прога не будет.

    uni
    Может быть, его вообще вызывать не надо?
     
  8. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    Нет, DllEntryPoint я там написал сам. Я переделал один exe файл в dll, чтобы использовать его функциональность. exe содержит интерфейс. Я пока отключил его (не передавая управление на start). DllEntryPoint() я сам внедрил, добавив к секции кода. Мне нужно было, чтобы этот exe был dll'кой и экспортировал функции некоторые из себя. Я создал таблицу экспорта, нашел функции ...короче целоя эпопея. Тут в RESEARCH exe->dll пост. Так вот, мне нужно ещё запустить интерфейс в отдельном потоке в этом же процессе, чтобы ещё интерфейс появился. Хорошо, что PEB не используется, теперь я могу написать CreateThread и подсунуть ему точку start(). Спасибо.