Добрий день . У меня неболшая проблемка с ReadConsole. Source: Code (Text): .386 .model flat,stdcall includelib c:\masm32\lib\kernel32.lib ExitProcess proto :DWORD GetStdHandle proto :DWORD EXTRN WriteConsoleA@20 :NEAR EXTRN ReadConsoleA@20 :NEAR .data message BYTE "Hello insert pass plz:" goodpass DWORD "123" introducedpass DWORD 3 messageSize = ($-message) bytesWritten DWORD ? consoleHandleo DWORD 0 consoleHandlei DWORD 0 .code start: invoke GetStdHandle,1 mov consoleHandleo,edx invoke GetStdHandle,0 mov consoleHandlei,edx push 0 push offset bytesWritten push messageSize push offset message push consoleHandleo call WriteConsoleA@20 push 0 push 3 push 3 push offset introducedpass push consoleHandlei call ReadConsoleA@20 invoke ExitProcess,0 end start Надо чтобы в introducedpass читало 3 дигита, но место етово делает оутпут "321 ♥". Не ругаете строго ,только начал асм учит =).
Code (Text): message BYTE "Hello insert pass plz:" goodpass DWORD "123" introducedpass DWORD 3 messageSize = ($-message) Code (Text): messageSize = ($-message) сразу за ней должен быть Code (Text): message BYTE "Hello insert pass plz:" т.е. Code (Text): message BYTE "Hello insert pass plz:", 0 messageSize = ($-message) строка заканчивается 0 Code (Text): goodpass DWORD "123", 0 И раз уж ты использовал invoke, то продолжай дальше.
и что за хендл странный ты передаешь в Code (Text): invoke GetStdHandle,1 STD_INPUT_HANDLE=-10 STD_OUTPUT_HANDLE=-11 STD_ERROR_HANDLE=-12 http://wasm.ru/article.php?article=1022006
Posmotrel paru tutov i vashi posti e pomenial na : Code (Text): .386 .model flat,stdcall includelib c:\masm32\lib\kernel32.lib ExitProcess proto :DWORD GetStdHandle proto :DWORD EXTRN WriteConsoleA@20 :NEAR EXTRN ReadConsoleA@20 :NEAR .data message BYTE "Hello insert pass plz:",0 messageSize = ($-message) goodpass DWORD "123",0 introducedpass BYTE 3 DUP(?),0,0 bytesWritten DWORD ? bytesRead DWORD ? consoleHandleo DWORD 0 consoleHandlei DWORD 0 .code start: push -11 call GetStdHandle mov consoleHandleo,edx push -10 call GetStdHandle mov consoleHandlei,edx push 0 push offset bytesWritten push messageSize push offset message push consoleHandleo call WriteConsoleA@20 push 0 push offset bytesRead push 10 push offset introducedpass push consoleHandlei call ReadConsoleA@20 invoke ExitProcess,0 end start No teper daze nichego ne pishet =( No esli dlia GetStdHandle peredaiu 1 (consoleHandleo) i GetStdHandle peredaiu 0 (consoleHandlei) , hotabi pishet message.
Ok ,vse reshil . Code (Text): .386 .model flat,stdcall includelib c:\masm32\lib\kernel32.lib ExitProcess proto :DWORD GetStdHandle proto :DWORD ReadConsoleA PROTO, handle:DWORD, pBuffer:PTR BYTE, maxBytes:DWORD, pBytesRead:PTR DWORD, notUsed:DWORD GetConsoleMode Proto, hConsoleHandle:DWORD, ipMode: PTR Dword SetConsoleMode Proto, hConsoleHandle:Dword, dwMode:DWORD BufSize = 80 .data STD_INPUT_HANDLE EQU -10 stdInHandle DWORD 0 buffer BYTE BufSize DUP(?),0,0 bytesRead DWORD ? saveFlags DWORD ? .code start: invoke GetStdHandle,STD_INPUT_HANDLE mov stdInHandle,eax invoke GetConsoleMode, stdInHandle, ADDR saveFlags invoke SetConsoleMode,stdInHandle,0 invoke ReadConsoleA,stdInHandle, ADDR buffer, 1, ADDR bytesRead,0 invoke SetConsoleMode, stdInHandle, saveFlags invoke ExitProcess,0 end start Vsem thanks za pomosh =)