[1], в котором хранится аргумент вызова программы, копируются функцией
strcpy в массив символов, для которого при объявлении была выделена память для восьми символов. Поскольку в программе не выполняется никаких проверок размера пересылаемых данных, то при копировании более восьми символов происходит переполнение буфера.
Функция sprintf — еще один пример часто встречающейся подверженной ошибкам функции. В результате ее применения возможно переполнение буфера, как это показано в следующем примере:
>/* sprbufo.c */
>/* Hal Flynn */
>/* December 31, 2001 */
>/* sprbufo.c demonstrates the problem */
>/* with the sprintf() function which */
>/* is part of the c library. This */
>/* program demonstrates sprintf not */
>/* sufficiently checking input. When */
>/* executed with an argument of 8 bytes */
>/* or more a buffer overflow occurs. */
>#include
>int main(int argc, char *argv[])
>{
>overflow_function(*++argv);
>return (0);
>}
>void overflow_function(char *b)
>{
>char c[8];
>sprintf(c, “%s”, b);
>return;
>}
Как и в предыдущем примере, строка символов аргумента программы копируется в восьмибайтовый массив символов. Поскольку при копировании из argv [1] не выполняется никаких проверок на соответствие размера пересылаемых данных размеру памяти, в которую выполняется копирование, то в результате возможно переполнение буфера.
Применение функции strcat без проверки размера обрабатываемых данных также может привести к переполнению буфера, как это видно из следующего примера:
>/* scatbufo.c */
>/* Hal Flynn */
>/* December 31, 2001 */
>/* scatbufo.c demonstrates the problem */
>/* with the strcat() function which */
>/* is part of the c library. This */
>/* program demonstrates strcat not */
>/* sufficiently checking input. When */
>/* executed with a 7 byte argument, a */
>/* buffer overflow occurs. */
>#include
>#include
>int main(int argc, char *argv[])
>{
>overflow_function(*++argv);
>return (0);
>}
>void overflow_function(char *b)
>{
>char c[8] = «0»;
>strcat(c, b);
>return;
>}
Данные командной строки из массива argv [1] передаются функции overflow_function, которая сцепляет их с данными восьмибайтового массива символов с. Поскольку в программе размер сцепляемых данных не проверяется, то в результате возможен выход за границы массива c.
Gets