моя функа основанная на поиске двух ковычек. Код (Text): ;в eax лежит адресс возвращенный после отработки GetCommandLineW __search_argW: pushad pushfd xor ecx,ecx start_search_string: cmp byte [eax],0x22 jz search_string_next add eax,0x2 jmp start_search_string search_string_next: add ecx,0x1 cmp ecx,0x2 je end_start_search add eax,0x2 jmp start_search_string end_start_search: add eax,0x4 mov dword [count_search_arg],eax popfd popad mov eax,dword [count_search_arg] ret count_search_arg dd ? Но тут грабли в чем: в висте например отказалась запускаться с программа с командной строки, потому что она имела вид: ""%systemroot%\system32\cmd.exe test_program.exe 4"" если запускать отладчиком в ХР то: "test_program.exe" 4 --вот как раз я видя эту строку в отладчике и писал функу, а если запускать в ХР мз коммандной строке то: "test_program.exe 4" т.е я не пойму на что орентироваться. то ли на ковычки(которые по-разному могут распологаться либо на .exe либо на пробел после .ехе то хз на что. Я когда-то поднимал тему подобную, потом сделал функи и они работали вроде, но догадываюсь что работали неправильно да и код был такой, что показывать стыдно(хотя выше тоже не казистый, но тот был много хуже) помогите алгоритмом или киньте свою функу поиска первого аргумента
если первый символ -кавычка, тогда ищем парную кавычку, иначе первый пробел. че сложного то, чет я не понял
неверен, но в висте там и параметр входит в строку. т.е если мы найдем парную ковычку, то указатель будет тут(выделено жирным шрифтом): "%systemroot%\system32\cmd.exe test_program.exe 4" и потом передвигаться назад в поиске .exe ?
Код (Text): #include <windows.h> #include <stdio.h> #include <shellapi.h> int __cdecl main() { LPWSTR *szArglist; int nArgs; int i; szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); if( NULL == szArglist ) { wprintf(L"CommandLineToArgvW failed\n"); return 0; } else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]); // Free memory allocated for CommandLineToArgvW arguments. LocalFree(szArglist); return(1); } PS Убогие малваре-писатели
она возвращает кол-во аргументов и масив этих аргументов, причем первое значение аргумента, имя самой программы.