Как выдрать аргумент из неизвестного массива?

Тема в разделе "WASM.BEGINNERS", создана пользователем jershell, 12 фев 2009.

  1. jershell

    jershell New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2009
    Сообщения:
    18
    Что-то непонятно с CommandLineToArgvW
    Возвращает две перменные, первая кол-во аргументов.
    Второй массив из аргументов. Вот у меня вопрос: "как из него вытащить строковую перменную"? Что делать, думаю прочитав исходник станет понятно чего хочу добиться. Сам я начинающий прошу сильно не пинать. Вотъ код:
    Код (Text):
    1. include \masm32\include\user32.inc
    2. include \masm32\include\shell32.inc
    3.  
    4. includelib \masm32\lib\user32.lib
    5. includelib \masm32\lib\kernel32.lib
    6. includelib \masm32\lib\shell32.lib
    7. .data
    8. MsgCaption db 'gamma',0
    9. MsgBoxTxtErr db 'Error',0
    10.  
    11. .data?
    12. nArgs dd ? ; кол-во аргументов
    13. szArglist dd ? ; масив аргументов
    14. commandStr LPWSTR ?
    15. .code
    16. _st:
    17. invoke GetCommandLineW
    18. invoke CommandLineToArgvW,eax, offset nArgs
    19. mov [szArglist],eax
    20. cmp szArglist,0
    21. jne _next
    22.  
    23. invoke MessageBox, NULL,addr MsgBoxTxtErr, addr MsgCaption, MB_OK
    24. _exit:
    25.  
    26. invoke ExitProcess,0
    27. _next:
    28. mov ebp,0
    29. _test:
    30. cmp ebp,nArgs
    31. jne _message_arg
    32. jmp _exit
    33. _message_arg:
    34. add ebp,1
    35. invoke MessageBox,0,addr [szArglist+ebp],addr MsgCaption, MB_OK
    36. jmp _test
    37. end _st
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Что-то типа.

    mov esi, pszArglist
    mov ebx, i
    mov eax, [esi+ebx*4]
    ; В eax - указатель на строку с i-м аргументом.
     
  3. jershell

    jershell New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2009
    Сообщения:
    18
    Сейчас попробую. Но строчка mov eax,[esi+ebx*4] немного смущает. Почему *4?
    Кстати а можно? mov MsgTxt, [esi+ebx*4]? Или Мsg будет отображать адрес, вместо содержимого?
     
  4. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    jershell

    4 - размер элементов (Scale Factor). Может быть 1,2,4 или 8. В интеловских мануалах 3-30 Vol. 1.
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    pszArglist - массив указателей. Размер указателя - 4 байта.
     
  6. jershell

    jershell New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2009
    Сообщения:
    18
    долго ломал себе голову потом все дошло. Помимо указателя, необходимо вызвать функцию MessageBoxW, а я вызывал энси вариант. Вопрос, т.к W вариант переменную MsgBoxCaption отображает в виде квадратиков, то что можно сделать, чтоб был юникод вариант, что-то с такой мелочью и не понятно.(