Значит вопрос.. мне надо получить параметры запуска програмы с коммандной строки.. вот есть код Код (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 "-=halkfild=- ",0 .data? commandStr LPSTR ? .code WinMain PROC invoke GetCommandLine mov commandStr,eax invoke MessageBox, NULL, addr commandStr, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL WinMain ENDP end WinMain все работает без ошибок, но не выводит параметры которые были заданы при запуске
Код (Text): WinMain PROC invoke GetCommandLine mov commandStr,eax invoke MessageBox, NULL, commandStr, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL WinMain ENDP GetCommandLine возвращает указатель на строку. соответственно commandStr должен быть dword
RamMerLabs спасибо.. может кто-то еще и скажет как "нормально" разбить всю переданую строку на подпараметры.. если можна то пример кода.. ну на составляющие типо разделитель пробел..
смотри парсер командной строки в пакете масма. в библиотеке masm32.lib исхлдники есть в том же пакете
розобрался... кому интересно выкидываю код.. получает первый и второй параметр Код (Text): .data first db 128 dup (0) second db 128 dup (0) .code start: invoke GetCL, 1, addr first invoke GetCL, 2, addr second invoke MessageBox, NULL, addr first, addr second, MB_OK invoke ExitProcess,0 end start
Код (Text): ;######################################################################### ;Процедура GetArgs ;Описание: ;Разбор параметров командной строки ;Вход: ; Num - номер параметра ; Buffer - буфер куда копировать параметр с данным номером ;Выход: EAX = 1 получили, иначе нет. ;######################################################################### GetArgs proc Num:dword, Buffer:dword invoke GetCommandLine invoke lstrcat,eax,offset Kav .if Num==1 invoke lstrcpy,Buffer,eax mov eax,1 ret .endif mov edi,eax mov al," " mov ecx,1000 repe scasb;Пропускаем пробелы вначале dec edi mov ecx,Num NextArg: push ecx .if byte ptr [edi]=="""";Если кавычка, то ищем следующую кавычку, иначе ищем пробел mov al,"""" inc edi .else mov al," " .endif mov ecx,1000 repne scasb;Ищем пробел или кавычки в коммандной строке .if al==" " dec edi .endif mov al," " mov ecx,1000 repe scasb;ищем не пробел, т.е. пропускаем пробелы .if al==" " dec edi .endif .if (byte ptr [edi]==0);строка закончилась jmp EndStr .endif push edi;Сохраняем начало имени первого файла .if byte ptr [edi]=="""" mov al,"""" inc edi .endif mov ecx,1000 repne scasb;Сканируем до пробела или до кавычек и вычисляем длину .if al==" " dec edi .endif mov ebx,1000 dec ebx sub ebx,ecx;Теперь в ebx длинна .if al=="""" add ebx,2 .endif pop edi .if dword ptr [esp]==2 invoke WriteProcessMemory,-1,Buffer,edi,ebx,0 mov eax,1 ret .endif pop ecx loop NextArg EndStr: pop ecx xor eax,eax ret GetArgs endp ;#########################################################################
Cock сёдня в абэд (12:15-12:45) перед посольством сша (макдональдс) если чё - звони на мобайл (у меня твоего нету)