Задача такая: программа должна узнать путь к своему исполняемому файлу, сравнить его с заданным и действовать зависимо от результата. Вот исходник: Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data MsgBoxCaption db "Iczelion Tutorial No.2",0 MsgBoxYes db "yes",0 MsgBoxNo db "no",0 Buffer db 0 Tester db "C:\test\test.exe" .code start: invoke GetModuleFileName, 0, addr Buffer, 17 push offset Buffer push offset Tester call lstrcmpi test eax,eax jz equals invoke MessageBox, NULL, addr Buffer, addr MsgBoxCaption, MB_OK jmp endoftheif equals: invoke MessageBox, NULL, addr MsgBoxYes, addr MsgBoxCaption, MB_OK endoftheif: invoke ExitProcess, NULL end start сравнение работает, путь к файлу определяется, но вместе оно работать не хочет. я предполагаю, что надо по-другому задать Tester (в другом формате, добавить спец.символ или что-то в етом роде). Подскажите плз как заставить ето чудо работать правильно.
Код (Text): .data MsgBoxCaption db "Iczelion Tutorial No.2",0 MsgBoxYes db "yes",0 MsgBoxNo db "no",0 Buffer db 0 Tester db "C:\test\test.exe" У вас буфер размером в 1 байт. Правильно так: Buffer db 255 dup (0) Вообще, скачайте отладчик OllyDbg и выполняйте свою программу по шагам. Так значительно быстрее искать ошибки
спс за совет! но вот в чем интерес: invoke MessageBox, NULL, addr Buffer, addr MsgBoxCaption, MB_OK правильно показывает путь О_о
Конечно. Ваш буфер переполняется и перетираются данные, следующие за ним. Т.е. затирается часть переменной Tester Повторюсь. Скачайте отладчик и все вопросы уйдут сами собой
Из-за того, что Buffer имеет недостаточный размер, GetModuleFileName перетирает всё что за ним идёт, т.е. Tester. Еще раз зададите вопрос, предварительно не воспользовавшись отладчиком, буду жаловаться администрации, чтобы вас отсюда выпилили. http://ollydbg.de Опередили меня
1)если администрация захочет меня "выпилить", то она это и без Вас сделает. Уж кто-кто, а она все видит 2)а что мне по-вашему делать, если я только начал изучать асм и еще не разобрался как с дебагером работать, не просто ж так я в "BEGINNERS" спрашивал?
это первое, что необходимо освоить) http://wasm.ru/series.php?sid=17 здесь учат обращаться с отладчиком