Название: Помогите немного)) Отправлено: nikeo от Март 03, 2013, 18:22 смысл такой:
Код: #include <stdio.h> есть тут какие то ошибки,кроме переполнения буфера?а то я не могу понять)) Прошу прощения за столь банальный вопрос. Название: Re: Помогите немного)) Отправлено: gil9red от Март 03, 2013, 19:55 Код: const char* const а в чем смысл функции void usage()? exit(-1); вызывает падение увеличьте размер буфера, может его не хватает вы уверены, что у вас вообще передается 2 параметр ехе? 1 параметр - путь к самой программе Название: Re: Помогите немного)) Отправлено: nikeo от Март 03, 2013, 20:16 Код: const char* const а в чем смысл функции void usage()? exit(-1); вызывает падение увеличьте размер буфера, может его не хватает вы уверены, что у вас вообще передается 2 параметр ехе? 1 параметр - путь к самой программе константный указатель на константу - что тут такого?) код не мой,мне ошибки найти надо) ну вызывает она падение программы,разве это ошибка? Название: Re: Помогите немного)) Отправлено: gil9red от Март 03, 2013, 20:19 Давно не видел подобных сишных извращений :)
Если к вашему ехе нет параметра, то и это вызовет падение программы strncat(buff, argv[1], // выход за пределы MAX_BUFF_LEN); попробуйте через консольку запустить ехешник, передав какую нибудь строку, тогда не будет падения программы Название: Re: Помогите немного)) Отправлено: nikeo от Март 03, 2013, 20:23 Давно не видел подобных сишных извращений :) да бред бредом)еще мне интересно,программа "упадет", если ввести строку длиннее чем 50 символов...почему именно 50? Название: Re: Помогите немного)) Отправлено: nikeo от Март 03, 2013, 20:27 Давно не видел подобных сишных извращений :) Если к вашему ехе нет параметра, то и это вызовет падение программы strncat(buff, argv[1], // выход за пределы MAX_BUFF_LEN); попробуйте через консольку запустить ехешник, передав какую нибудь строку, тогда не будет падения программы именно так я и проверял,просто мне надо найти ошибки в коде,а следовательно: переполнение буфера отсутствие оператора return в функции main программа падает изза вызова функции exit(-1) что то еще упустил? Название: Re: Помогите немного)) Отправлено: gil9red от Март 03, 2013, 20:29 выход за пределы массива, если ехе не имеет параметра
Код: argv[1] Код: argv[0] - абсолютный путь к самой программе Код: argv[1], argv[2] и т.д. - дополнительные параметры, передаваемые ехе Название: Re: Помогите немного)) Отправлено: nikeo от Март 03, 2013, 20:32 выход за пределы массива, если ехе не имеет параметра Код: argv[1] так это разве не переполнение буфера?) если не будет параметров - произойдет вызов функции usage() Название: Re: Помогите немного)) Отправлено: gil9red от Март 03, 2013, 20:35 Код: int a[4]; тоже самое и в вашем случаи :) Название: Re: Помогите немного)) Отправлено: nikeo от Март 03, 2013, 21:01 Код: int a[4]; тоже самое и в вашем случаи :) тут смысл в том, зачем эта программа нужна. если предполагается использование ехе с передачей параметров,то все норм. но почему падает если передать от 51 символа?не от 38,не от 56,а от 51? Название: Re: Помогите немного)) Отправлено: Igors от Март 03, 2013, 21:57 еще мне интересно,программа "упадет", если ввести строку длиннее чем 50 символов...почему именно 50? Потому что последний аргумент strncat ограничивает не общую длину а только кол-во добавляемых. Аккуратнее такКод А лучше так Код
Название: Re: Помогите немного)) Отправлено: nikeo от Март 04, 2013, 08:40 Да вот и я так думаю,но смысл как раз в ошибке по информационной безопасности,я то сам такой код писать бы не стал)
Название: Re: Помогите немного)) Отправлено: Fat-Zer от Март 05, 2013, 19:12 чего-то развели муть.... никакого переполнения тут нет... exit(-1) уж тем более не ошибка и ни какого падения она не вызывает, а только штатное завершение с ошибкой...
единственно, что потенциально опасно, так это printf(buff): если передаваемая строка будет содержать что-то типа %s, то программа действительно упадёт... Название: Re: Помогите немного)) Отправлено: Old от Март 05, 2013, 19:20 Название: Re: Помогите немного)) Отправлено: Igors от Март 05, 2013, 22:02 Та как-то оно написано "чмошно". То usage - поди пойми что внутри него exit, значение 56 тоже "чудное". Ну ладно, допустим пресекли переполнение - но хз это весь вывод или огрызок. Странная какая-то "информационная безопасность"
Название: Re: Помогите немного)) Отправлено: Old от Март 06, 2013, 10:09 Та как-то оно написано "чмошно". А что вы хотите от тестового задания, которое написано специально дырявым, что бы студенты учились взглянув на него, находить проблемные места. :)Название: Re: Помогите немного)) Отправлено: Igors от Март 06, 2013, 10:47 А что вы хотите от тестового задания, которое написано специально дырявым, что бы студенты учились взглянув на него, находить проблемные места. :) Да что-то уж "слишком тонко" :) |