[C con Clase] QUE PASA EN LAS ENTRAÑAS DEL "STRCPY"

Programante programante en gmail.com
Sab Jun 20 01:37:12 CEST 2009


Pedro Rodríguez González escribió:
>  Hola q tal! Bueno yo de la lista soy el menos hablador, y creo que es
> hora de preguntar a los "masters", aunque mi duda va dirigida a todos
> los miembros y/ miembras/ :) . Resulta que un chaval necesita realizar
> un ejercicio de desbordamiento del "*montón*", para ello usó un
> sencillo programa en C que toma un argumento de la línea de comando
> (cadena) y la copia, mediante un *strcpy* a un puntero que tiene
> asignada unos cuantos bytes, mediante un *malloc*. El tema es que por
> muy larga que sea la cadena no se produce ningún error de segmentación
> ni nada por el estilo, aún superando con creces el puntero destino.
> Desconozco cómo funciona internamente un *strcpy* por lo que deduzco
> que ésta función posiblemente realiza algún arreglo moficando
> dinamicamente el tamaño del puntero destino. ¿ Alguien puede aclararme
> algo más ? Muchas gracias por adelantado y saludos nuevamente.
>
> Pedro

No. strcpy() no hace nada de todo eso.

Es una función de lo más simple. Una forma de implementarla sería:

|char *strcpy(char *restrict /s1/, const char *restrict /s2/) {
    int i;
    for (i=0; ||s1[i] = s2[i];|| i++);
    return s1;
}


Tal vez la cadena no sea lo bastante larga. O estás desbordando otra
zona de memoria.
Si está reservada en el montón, tendrás al menos una página
(habitualmente 4096 bytes)
de espacio reservado para el proceso. Después puede que haya más espacio
reservado
para el programa (por ejemplo variables del entorno) y siga
sobreescribiendo alegremente
hasta que se acaba la cadena.
También puede estar el compilador haciendo "trucos" para que los
desbordamientos sean
menos efectivos.

|




Más información sobre la lista de distribución Cconclase