Буфер для аргументов командной строки - Assembler
Формулировка задачи:
Добрый вечер. Недавно начал изучать Asm. Возникли следующие вопросы:
...1
Нашел функцию GetCommandLine, которая возвращает указатель на строку, переданную через командную строку. Есть ли какой-то известный способ перебора аргументов командной строки или надо самостоятельно анализировать результат функции GetCommandLine. Например, в C/C++ есть массив, который содержит указатель на каждый аргумент, представленный в виде строки. Есть ли в Asm что-либо похожее?
...2
Когда в программу через командную строку передаются аргументы в виде строк, то, наверно, есть область памяти в которой хранятся эти строки. В связи с этим вопрос - что это за область? Куча? Стек? И может ли быть нарушена корректность работы программы при превышении длины строки некоторого предела?
Решение задачи: «Буфер для аргументов командной строки»
textual
Листинг программы
.386 .model flat, stdcall option casemap :none ; case sensitive include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\shell32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\shell32.lib .data MsgBoxCaption db "Test 1",0 MsgBoxText db "Test 2",0 argc dd ? .code start: invoke GetCommandLineW invoke CommandLineToArgvW, eax, addr argc mov esi, eax mov ecx, argc loop_print: pusha invoke MessageBoxW, NULL, [esi], addr MsgBoxCaption, MB_OK popa add esi, 4 loop loop_print invoke ExitProcess, NULL end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д