Добрый день жители вазма, вчера полдня изучал чтение и запись в реестр, вроде разобрался, так-же разобрался с условными операторами IF ELSE, но не могу понять как мне сравнить 2 строчки ? В этом примере я читаю из ключа реестра записанный IP адрес и мне его нужно сравнить с verf, если он равен то вывести мсгбокс, если нет то вывести соответсвенно другой мсбокс. Я так понимаю надо данные через регистр как-то передавать ? подскажите правильный путь, будьте так любезны, а лучше кусочек или шаблончик кода, думаю там в пару строк всего... заранее благодарен! Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\winmm.inc include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\advapi32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib includelib \masm32\lib\advapi32.lib includelib \masm32\lib\winmm.lib include \masm32\include\wsock32.inc includelib \masm32\lib\wsock32.lib includelib \masm32\lib\wininet.lib include \masm32\include\wininet.inc .data? key dd ? buf db 1024 dup (?) .data SubKey db "SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0 vName db "Test",0 ; параметр в реестре mbCapt db "RegValue",0 ; заголовок окна mbCapt2 db "ERROR",0 ; заголовок окна verf db "10.10.20.25",0 ; с этим значением сравнить rt dd REG_SZ bsz dd sizeof buf .code start: invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr SubKey, 0, KEY_QUERY_VALUE, addr key invoke RegQueryValueEx, key, addr vName, 0, addr rt, addr buf, addr bsz .IF eax == ERROR_SUCCESS ; если есть параметр в реестре то читаем его и выводим invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK invoke RegCloseKey, key invoke ExitProcess, 0 .ELSE ; если ключа нет, то выдаем ошибку invoke MessageBox, NULL, addr buf, addr mbCapt2, MB_OK .ENDIF ret end start
В masm же есть szCmp, ucCmp или CompareString, lstrcmp из винапи. Или цель - написать свою процедуру сравнения?
Код (Text): .386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive include \masm32\include\masm32rt.inc ;---------------------------------------------------------- .data _ok db "Password OK",0 _er db "Password Incor",0 pas db "password",0 entry db "password1",0 .code ;---------------------------------------------------------- start: invoke szCmp,addr entry,addr pas .if eax == 0 invoke StdOut,addr _er .else invoke StdOut,addr _ok .endif invoke ExitProcess,0 ret end start
таккк.. хотел попросить примерчик, уже выложили, щас потестим! Спасибо! Ну значит так сделал (на счет считывания в строку, можно поподробнее пожалуйста, как мне это сделать ?) Код (Text): invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr SubKey, 0, KEY_QUERY_VALUE, addr key invoke RegQueryValueEx, key, addr vName, 0, addr rt, addr buf, addr bsz invoke szCmp,addr verf,addr buf .if eax == 0 invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK .else invoke MessageBox, NULL, addr buf, addr mbCapt2, MB_OK .endif но чет один фиг не работает как надо
Ну смотри что у тебя в buf. Ну так например Код (Text): invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr SubKey, 0, KEY_QUERY_VALUE, addr key invoke RegQueryValueEx, key, addr vName, 0, addr rt, addr buf, addr bsz ;-------------------------------------------------------------- lea edi, buf ; <<< это потом затрешь int 3 ; <<< если в edi - в Олли видно строку, то все нормально ; если адрес (ну не строку) то пишем ; lea esi, buf ; invoke szCmp,addr verf,esi ; тыж не пишешь как buf у тебя заказан )) ;-------------------------------------------------------------- invoke szCmp,addr verf,addr buf .if eax == 0 invoke MessageBox, NULL, addr buf, addr mbCapt, MB_OK .else invoke MessageBox, NULL, addr buf, addr mbCapt2, MB_OK .endif Установил OllyDbg. Настроил ее как отладчик по умолчанию. Пересобрал сомнительный код с int 3 в exe. Код (Text): start: lea edi,entry int 3 ;<<<<<<<<<<<<<<<< тут остановимся в отладчике invoke szCmp,addr entry,addr pas .if eax == 0 invoke StdOut,addr _er .else invoke StdOut,addr _ok .endif invoke ExitProcess,0 ret end start Запустил exe. Выпало прерывание в OllyDbg. Вот теперь смотрим что у нас и где у нас, если надо правим
дружище!!!! шикарно разжевал, СПАСИБО ТЕБЕ ОГРОМНОЕ!!!! и про дебагер спасибо, он стоял но я сильно в него не лез Все заработало