Буфер для аргументов командной строки - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы