blob: b41204939969d48dff28660bcca18cd4f7a99b8a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
* Las funciones llamadas dentro de otras por primera vez dejan de
estar controladas por el programa (cambia su GOT sin que nos
enteremos)
* Las funciones de no retorno (ie, longjmp), pueden fastidiar al
programa.
SOLUCION: Olvidarnos del 'reentrant' y loggear todo; y comprobar
*todo el GOT* del programa de vez en cuando (de manera
inteligente; cuando sabemos que se ha llamado a una funcion
nueva, por ejemplo)
WARNING: Si se quiere loggear todo, hay que tener presente que pueden
estar ejecutandose varias llamadas a la vez; no basta con
tener un 'where_to_return'; hay que tener muchos (tal vez se
podria hacer con un struct similar a 'ax_jmp_t')...
* Utilizar prefijos para cada simbolo dentro de un mismo ejecutable
(ejemplo: init_a, init_b, print_a, print_b ...)
* Usar 'errno' para loggear errores de function calls
* Usar 'msync' (o algo parecido; 'access'?) para ver si las
direcciones dereferenciadas son validas, para evitar SIGSEGV
|