crkir1.exe вылетает при вызове MessageBoxA из user37.dll

Тема в разделе "WASM.BEGINNERS", создана пользователем Llirik, 11 окт 2009.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Подскажите, пожалуйста, в чём причина и что с этим можно сделать
     
  2. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
     
  3. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    1 варианта вижу:
    - пить яд
    - биореактор
     
  4. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    2*
    где же редактирование
     
  5. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    к сожалению я не смог прикрепить сюда мои файлы, по этому залил их на http://letitbit.net/download/0159.f0ae2f3d4bd409922bd80c93d/SYSTEM32.7z.html
     
  6. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    А почему название user37.dll ? Чем стандартная user32 не устраивает? Видимо windows считает данные библиотеки не родными и не разрешает им грузится по их imagebase.
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Причина в том, что ты неправильно диагностировал причину :-P Вылетает все при загрузке DLL - до выполнения дело не доходит.
     
  8. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    А как сделать так, что эти DLL не вылетали?
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Судя по названиям, ты или автор кряка взял системные DLL , пропатчил их и переименовал.
    С ntdll.dll по-моему такое делать нельзя. Все эти DLL содержат блок инициализации, в ntdll он выполняется по-моему в привелигированном режиме - вот он и вылетает.
     
  10. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Я могу обойтись и стандартной ntdll.dll. Тут самое важное, чтоб kernel37.dll заработал
     
  11. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Вот пример по-проше
     
  12. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    http://letitbit.net/download/6359.d6dfd4762258e7c7359f634e1/SYS32.7z.html
     
  13. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Тогда вопрос такой: почему при линкеровке статичной user32.lib появляются эти две ошибки?

    user32.lib(user32imp.obj) : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function _wvsprintfW
    user32.lib(user32.obj) : error LNK2019: unresolved external symbol __imp__PolyPatBlt@20 referenced in function _USER32_DllMain@12
    crkir1.exe : fatal error LNK1120: 2 unresolved externals
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Может я и ошибаюсь, но invoke ставит имя MessageBoxA@16. oldnames.lib помогает перенаправить часть таких имен, но нужно брать ее от нужной версии. В твоей : PolyPatBlt@24 !

    Что касается второго варианта без ntdll - в user37.dll остались "хвосты" имени от user32.
    Я попытался протрассировать, что делает DLLMain, но вылетел. По сообщению об ошибке ясно, что там проверяют частично в user37, частично в user32. А может так тоже нельзя делать - user32 грузится тоже на начальном этапе и никак не предназначена для загрузки, как простая DLL без серьезных переделок .
    Если бы это было просто, никто бы не мучался с хуками и инжектами в системные DLL
     
  15. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Слушайте, я, конечно, не понял юмора, но в Gdi32.lib из ddk WinXP вообще нет PolypatBlt)) так что не могли бы вы дать ссылку на Gdi32.lib с этой функцией. а по поводу MessageBoxA@16 я немножко не понял, что надо сделать, так как в oldnames.lib нет ни каких упоминаний о MessageBoxA@16.
     
  16. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Поставить в команде call то имя, которое ставит макрос invoke - MessageBoxA@16
    16 означает размер занимаемый аргументами на стеке. Это придумал Микрософт для контроля и реализации разнотипных вызовов, но потом пожалел и придумал костыли вроде oldnames.
    Можно воспользоваться способом обойти это, но для masm я его не знаю. Мой способ тебе явно не подойдет, т.к. это было в Фортране и там не было библиотек win32.

    В программировании можно конечно
    , но лучше делать нормально.
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    И вообще, зачем ты из ddk экзешник делаешь. Обычно из ddk делают нативный экзешник, который может выполняться до входа в систему.
     
  18. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Я сначала собирался писать драйверы) Я последовал Вашему совету и скачал sdk WinXP SP2, но Gdi32.lib оказался точно такой же как в dkk, а oldnames.lib вообще там нет. И как мне быть?
     
  19. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Работать по инструкции. У меня куча вариантов компилеров, в одних есть oldnames, в других нет , в третьих он не содержит нужных имен. Однако простые программы они все нормально строят.
    А разница между DDK и SDK не столько в библиотеках(Винды они и есть Винды), в хидерах.
    При правильном использовании все должно работать.
    У тебя любимая ошибка всех начинающих. Сначала залезут в "дебри", а потом спрашивают как оттуда выбраться. Спроси про свою программу, а не про дебри. Я вот например не вижу необходимости SDK для масм - все работает и в стандартном дистре(там все библы есть) и в "сборках" на основе Visual Studio - у меня 2 варианта 2003-й.
     
  20. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    valterg а у Вас вообще мой исходник компилируется и работает?