как правильно парсить аргументы коммандной строки ?

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

  1. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    моя функа основанная на поиске двух ковычек.
    Код (Text):
    1. ;в eax лежит адресс возвращенный после отработки GetCommandLineW
    2. __search_argW:
    3.         pushad
    4.         pushfd
    5.         xor ecx,ecx
    6. start_search_string:
    7.         cmp byte [eax],0x22
    8.         jz search_string_next
    9.         add eax,0x2
    10.         jmp start_search_string
    11. search_string_next:
    12.         add ecx,0x1
    13.         cmp ecx,0x2
    14.         je end_start_search
    15.         add eax,0x2    
    16.         jmp start_search_string
    17. end_start_search:
    18.         add eax,0x4
    19.         mov dword [count_search_arg],eax
    20.         popfd
    21.         popad
    22.         mov eax,dword [count_search_arg]
    23.  
    24. ret
    25. count_search_arg dd ?
    Но тут грабли в чем: в висте например отказалась запускаться с программа с командной строки, потому что она имела вид: ""%systemroot%\system32\cmd.exe test_program.exe 4""

    если запускать отладчиком в ХР то: "test_program.exe" 4 --вот как раз я видя эту строку в отладчике и писал функу, а если запускать в ХР мз коммандной строке то: "test_program.exe 4"

    т.е я не пойму на что орентироваться. то ли на ковычки(которые по-разному могут распологаться либо на .exe либо на пробел после .ехе то хз на что. Я когда-то поднимал тему подобную, потом сделал функи и они работали вроде, но догадываюсь что работали неправильно да и код был такой, что показывать стыдно(хотя выше тоже не казистый, но тот был много хуже)

    помогите алгоритмом или киньте свою функу поиска первого аргумента
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    если первый символ -кавычка, тогда ищем парную кавычку, иначе первый пробел. че сложного то, чет я не понял
     
  3. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    неверен, но в висте там и параметр входит в строку. т.е если мы найдем парную ковычку, то указатель будет тут(выделено жирным шрифтом): "%systemroot%\system32\cmd.exe test_program.exe 4" и потом передвигаться назад в поиске .exe ?
     
  4. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    а чего незаюзать виндовую функу CommandLineToArgvW ?
     
  5. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    она возвращает кол-во аргументов и только
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <shellapi.h>
    4.  
    5. int __cdecl main()
    6. {
    7.    LPWSTR *szArglist;
    8.    int nArgs;
    9.    int i;
    10.  
    11.    szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
    12.    if( NULL == szArglist )
    13.    {
    14.       wprintf(L"CommandLineToArgvW failed\n");
    15.       return 0;
    16.    }
    17.    else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);
    18.  
    19. // Free memory allocated for CommandLineToArgvW arguments.
    20.  
    21.    LocalFree(szArglist);
    22.  
    23.    return(1);
    24. }
    PS Убогие малваре-писатели
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    не только.
    читай msdn.
    upd: опередили.
     
  8. jershell

    jershell New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2009
    Сообщения:
    18
    она возвращает кол-во аргументов и масив этих аргументов, причем первое значение аргумента, имя самой программы.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n1kt0
    ты дурак? мсдн почитай
     
  10. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    n1kt0 почитай msdn