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

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

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    я скачал Visual Studio 2008 и с gdi32.lib разобрался, а вот MessageBoxA в oldnames.lib нет. может какой-то другой костыль есть или другое решение?
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Она находится там где и положено в USER32.LIB oldnames c ней - это какие-то очень устаревшие костыли, возможно для ВИН98. Естественно, что "правильное" ее имя _MessageBoxA@16 , но про эти "фокусы" я вам уже все объяснил.
     
  3. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Так я уже пробовал пробовал писать _MessageBoxA@16, тогда линкер ругается на __MessageBoxA@16
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А я разве сказал, что правильное имя _MessageBoxA@16. Я сказал, что правильное имя делает макрос invoke, а для call надо читать. Простая логика подсказывает, что просто не надо подчеркивание ставить - видимо компилятор его добавляет. Кстати я ведь писал об этом.
     
  5. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Так?
    .486p
    ;option casemap:none
    .model flat, stdcall
    ;includelib C:\masm32\lib\kernel32.lib
    includelib C:\masm32\lib\Static\user32.lib
    includelib C:\masm32\WINDDK\2600.1106\lib\wxp\i386\kernl32p.lib
    includelib C:\masm32\WINDDK\2600.1106\lib\wxp\i386\kernel32.lib
    includelib C:\masm32\WINDDK\2600.1106\lib\wxp\i386\gdi32.lib
    ;include c:\masm32\include\kernel32.inc
    ;include C:\masm32\include\user32.inc
    extrn MessageBoxA@16 : dword

    .data
    MsgText db "Hello world!",0
    MsgTitle db "This is a messagebox",0

    .code
    main:

    invoke MessageBoxA@16, NULL, ADDR MsgText, ADDR MsgTitle, NULL


    end main

    тоже не компилируется
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Или
    CALL MessageBoxA@16
    или
    invoke MessageBoxA, ....

    Неужели я так непонятно объяснил ? Советую все-таки почитать чего-нибудь, так как на идиотские вопросы не хочется отвечать !
     
  7. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Я уже и то и другое пробовал!!!! не компилируется!! может Вы используете не статичную, а стандартную User32.lib? Так и у меня с ней всё оки доки!!
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А где я тебе ее возьму. У меня такой отродясь не было. Видел только функцию MessageBoxA в libc.lib
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    И вообще у тебя "каша" в голове. Вот судя по этой ссылке http://it.kgsu.ru/Asm_32/as32_070.html
    Всю жизнь они назывались библиотеками импорта, а динамические библиотеки - это user32.dll

    Лучше дай твой исходник и я поставлю правильное название и для call и для invoke, а то уже всех замучал. Я про подчеркивание написал не подумав или не поняв тебя, а ты уже готов мне во всем верить :)
     
  10. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Так статичная User.lib, сделанная при помощи Dll to Lib, находится в моём архиве http://www.wasm.ru/forum/attachment.php?item=3588 ))) Вот я и хочу выяснить: то ли Dll to lib это полная лажа, то ли с этим можно что-нибудь сделать)
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ну наверное с user32.dll этот номер не пройдет : dll -> lib По крайней мере плагин из тотал командера выдает разные адреса из библиотеки импорта, а из "твоей" user32.dll - адреса все одинаковые. lib.exe тоже выдает вот такое :
    user32.obj
    user32_exp.obj
    user32imp.obj
    Похоже все собрано в одну кучу. Но я не спец по утилитам dll -> lib и по либам тоже.
     
  12. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Ладно. Благодарю за помошь) Буду искать другое решение моей задачи. А на счёт CALL MessageBoxA, то можно писать и так, если подключить User32.inc))
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    1) Так вот я и не понял, какая у тебя задача? Поправить алгоритм работы MessageBoxA? Думаю, что кроме ижекта, других нормальных способов нет. Я немного посмотрел дерево вызовов: там используется таймер и есть вызов овобождения heap. Не думаю что можно это быстро "пофиксить"...
    А блок инициализации там - "мама не горюй". До пенсии будешь разбираться.
    2) Про User32.inc - все правильно там стоит
    Код (Text):
    1. MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    Достаточно эту строчку вставить в свою прогу.
     
  14. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    задача не много не такая) мне надо выдрать некоторые API из системных DLL или хотя бы переименовать эти DLL. MessageBoxA я просто взял для примера)
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Все равно это не конкретная задача. Большинство, а может и все функции "выдрать" нельзя, т.к. там сложная кухня. Это тебе не прикладные функции, которые безболезненно можно "выдергивать".
    А переменовать - я уже написал, что надо серьзно разобраться с функцией инициализации этих DLL, иначе будут конфликты - она просто не загрузится, точнее загнется при инициализации. И уж Ntdll никак не "сдублируешь".
     
  16. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Llirik
    ну так и выдирайте. берите иду и потихоньку-полегоньку выдирайте что вам надо. и все сразуже тестите.
     
  17. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Ладно) вот подучусь и придётся разбираться с функцей иницилизации этих Dll) а на счёт иды, на это у меня уйдут годы) так как мне нужна не парочка функций, а несколько десятков их, а может быть даже и сот) пробовал уже))
     
  18. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Если хочешь помощи, то не темни и скажи конкретно, что нужно. Точнее зачем тебе сто функций отдельно, которые итак загружены в системе? Для патча уже сотый раз повторяю лучше инжекта ничего не придумано, а немало людей "ломали зубы" на этой проблеме. Да неудобно, да сложно, но ... Для обхода проверок антивирусов есть тоже куча проверенных методов. Возможно ты и изобретешь велосипед, но очень нескоро.
     
  19. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Так я уже писал в других темах этого форума зачем мне это всё нужно)) только на сей раз взял задачу немного попроще)) в моей ОС нет некоторых API, так вот я и хочу их туда добавить) к тому же такой прецедент уже имеется. проект KernelEx добавляет парочку функций и некоторые проги для ХР у меня заработали! Но я хочу организовать это всё немного по-другому
     
  20. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Тогда этот топик абсолютно бессмысленный. Не отнимай у людей время понапрасну ! Кто же во времена виртульных машин "извращенные" приложения для 98-го компилирует ,линкует и проверяет в ХП ??? Да еще с DDK для ХП. Твоя тема для HEAP или накрайняк для kernel.os