Меня вот что интересует - что особенного делает плагин CommandBar с этим ? ? MessageBoxA.Выдаёт какой-то адрес во всех системах счисления часто используемых. При переходе по адресу я попадаю на инструкции сохранения регистров и пушев в стек(я так понял,это параметры для меседжбокса - их всего 4). Также Олька грит,что функция находится в модуле USER32.DLL.Жамкаю CTRL+N,пытаюсь найти её в этом модуле,и облом - её там нет и не было,а написано же CALL USER32.MessageBoxExA(хотя такой функции я не знаю - есть MessageBoxA),зато если жамкнуть CTRL+N в главном модуле проги,то увижу только один вызов MessageBoxA,и никаких тут MessageBoxExA.Тоже находится в юзер32.длл.Так что я делаю неправильно и почему такой результат ?! Не могу понять. И ещё: Что делает функция Find references to import при клике правой кнопке по апишной функции,предварительно вызвав CTRl+N ? ЗЫ: прога обычный крэкми крухэда(самый первый)
Wardrag какая-то каша, простите. выложите прогу и задайте конкретный вопрос(по такому-то адресу, такая-то функция и тд и тп) собсно несколько предварительных ответов: команда ?MessageBoxA позволяет Вам узнать адрес начала этой функции. hex адрес должен быть. смотрите лучше или прогу в студию это просто расширенная функция. для 32-битных систем какого результата хотите добиться? находит ссылки на функцию в программе.
Wardrag Найдите 10 отличий или сколькими способами можно вызвать MessageBox? Во вложениии сорц и ехе 12 способов, которыми можно вызвать MessageBox
Ээ,да ладно,походу глюк какой-то был.Я думал,в теме никто вообще не ответит(два дня прошло ж).За отеты спасибки: ) Тогда такие вопросы чисто по коду: 1)_OK dw 'O','K',0 - _OK это переменная,но что в результате этого ей будет присвоено ? запись _OK dw 'something',0 я ещё понимаю из масм. 2) Num2 equ $-MessageText1 - что за $- и зачем оно здесь? Судя по всему,какая-то константа : ( 3) call _imp__MessageBoxIndirectW@4 Зачем тут символы подчеркивания? Это как-то связано со стандартом передачи параметров ? (Просто я по умолчанию юзал стдколл всегда) 4) push MB_ICONASTERISK or MB_OK - разъясните,пожалуйста,что сюда идёт в стек ? два параметра ? один ? один из двух ?! Строго не судите,я масм ещё мало знаю
Wardrag Masm, Nasm.. на первых порах не так важно, хотя на вкус и цвет и тд и тп. Зачем dw 'O','K',0??? Лучше db 'O','K',0, че память-то расходовать? db 'O','K',0 тоже, что и db 'OK',0 что тут сложного? исходничек бы.. ну могу Вам сказать что $ вычисляет позицию начала строки. Если то что хранится в MessageText1 находится перед Num2 equ $-MessageText1, то Num2 будет содержать размер символьного массива MessageText1. ок? stdcall это лишь соглашение о передаче аргументов и "кто выравнивает стек". Подчеркивания это просто "хороший стиль". Знаю, что Вы это знаете. У Вас, вероятно, вопрос:"шо это за функа такая _imp__MessageBoxIndirectW@4?" Может это просто своя определенная в программе функа? MB_ICONASTERISK и MB_OK это аргументы, которые задают стиль Вашего окошка, так? Ну значит операция push MB_ICONASTERISK or MB_OK заносит в стек оба параметра) это всё равно, что push MB_ICONASTERISK push MB_OK только оптимизировано немножко. Всегда пожалуйста. А вообще, пользуйтесь отладчиком и всё станет понятно.
Neonix Разве? Почему-то мне всегда казалось (непонятно почему), что инструкция push MB_ICONASTERISK or MB_OK занесёт в стек одно число равное MB_ICONASTERISK or MB_OK. А пара команд push MB_ICONASTERISK push MB_OK занесёт в стек по отдельности 2 числа. т.е. в первом случае esp уменьшится на 4, и в стеке будет находиться число MB_ICONASTERISK or MB_OK, а во втором случае esp уменшится на 8, и в стеке будут отдельно находиться 2 числа: MB_OK и MB_ICONASTERISK.
qwe8013 да, полностью согласен. но результат-то будет один и тот же? просто оптимизация, я говорил это. это просто ясная аналогия, которую я провел.
2Neonix что ты куришь, какая аналогия между одним двордом и двумя? Впрочем я тебя понял, но это объяснять так нельзя. А показать на примере, как упаковываются битовые флаги в дворд с помощью логической операции ИЛИ.
izl3sa объясняю как могу. парень два дня ждал пока ему кто-нибудь ответит. это я к тому, что не обсёром надо заниматься, а делом(обьяснить непонятное в данном случае). P.S. я курю только табак Wings Light.
Так исходник в посте #4 смотрите внимательнее... Wardrag я так понял эти вопросы ко мне, как к автору этого 1)_OK dw 'O','K',0 - _OK это переменная,но что в результате этого ей будет присвоено ? запись _OK dw 'something',0 я ещё понимаю из масм. _OK -- unicode строка, предназначенная для SoftModalMessageBox -- unicode-символ латинской буквы это слово содержащее в первом байте 0, а во втором байте ASCII-кодировку соответствующего символа, в FASM можно прямо писать du 'something',0 а в MASM или через dw 's','o','m','e','t','h','i','n','g',0 или пользоваться макросом Код (Text): unicode macro page,string,zero irpc c,<string> db '&c', page endm ifnb <zero> dw zero endif endm unicode 0, <something>,0 а вот dw 'something',0 MASM не скомпилирует и выдаст ошибку "constant value too large" 2) Num2 equ $-MessageText1 - что за $- и зачем оно здесь? Судя по всему,какая-то константа $ - получить текущий адрес, конструкция "Num2 equ $-MessageText1" после строки MessageText1 позволяет получить в переменную Num2 количество байт в строке MessageText1 3) call _imp__MessageBoxIndirectW@4 Зачем тут символы подчеркивания? Это как-то связано со стандартом передачи параметров ? (Просто я по умолчанию юзал стдколл всегда) В тексте нет упоминания об inc-файлах за исключением windows.inc, а вот в user32.lib функция MessageBoxIndirectW выглядит именно так, кроме того, использование формы _imp__MessageBoxIndirectW@4 позволяет сделать код чуть короче (а почему короче смотри здесь) 4) push MB_ICONASTERISK or MB_OK - разъясните,пожалуйста,что сюда идёт в стек ? два параметра ? один ? один из двух ?! В windows.inc константа MB_ICONASTERISK определена как 40h, а MB_OK равно 0 MB_ICONASTERISK or MB_OK = 40h именно это число и передается push в качестве параметра