[eside-ghost] Control de errores de acceso a memoria en C?
Jon Valdés
juanval en gmail.com
Mie Mar 5 18:11:33 CET 2008
2008/3/5 STenyaK (Bruno Gonzalez) <stenyak en gmail.com>:
> Suelo intentar huir de código C, asi que no te puedo decir mucho...
>
> Googleando rapidamente, dicen q no hay ninguna solución "portable".
>
> Yo personalmente intentaría usar algun sizeof (en conjuncion con un
> strncmp, en vez de strcmp, ya q estamos).
>
> Si eso no es suficiente (probablemente no), siempre puedes usar
> try-catch para cazar el segfault si ocurre. Si va a rular en windows,
> mira la documentacion a ver qué tipo de excepcion usa, q en win a
> veces pasan de std::exception, y tal vez tengas q cazar directamente
> "...".
>
> Y luego ya, quedaria eliminar la causa en vez de arreglar la consecuencia:
> - Siempre poner los punteros a NULL con los delete o antes de los new.
> - Activar todos los warnings posibles para cazar casts implicitos no
> deseados, como es tu ejemplo de pasar un (int)(42) a un (const
> char*)(42).
> - Usar punteros inteligentes :-P
>
> No se me ocurre mucho mas. Igual valgrind te puede echar una mano de
> alguna forma, no recuerdo si hacía analisis estático o solo en
> ejecución.
Casi nada de esto es viable, me temo. El tema es que para clase tengo
que programar dos librerías para comunicaciones con sockets. Una para
la parte cliente, y otra para la parte del servidor.
Y el tema es que hay un corrector automático que prueba si las
librerías funcionan correctamente... e intenta joder las
comunicaciones a base de meter datos erroneos, buffer overflows, etc
Asi que me quiero cubrir las espaldas lo máximo posible. No sé si
intentarán pasar datos en zonas de memoria no accesibles... pero el
profesor es muy crack, y parece perfectamente capaz de liarla asi de
gorda a posta, para intentar jodernos... :-S
En cuanto a usar cosas de C++, no es viable, puesto que la práctica es
en C. Así que lo único, intentar cosas de sizeof y similares, no se
Si a alguien se le ocurre alguna idea, se agradecerá mucho :)
Taluegooo
Más información sobre la lista de distribución eside-ghost