aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Cespedes <cespedes@thehackers.org>1997-04-16 09:24:13 +0200
committerJuan Cespedes <cespedes@thehackers.org>1997-04-16 09:24:13 +0200
commit562c710d35406481be1c52ff2acf7200d2e85e6f (patch)
tree420d9e69e0ab551e8a5a0b229ad21e7cfbd7eca8
parentaa584fbcce20ee35175ad29a12875afb19b3ca01 (diff)
downloadltrace-562c710d35406481be1c52ff2acf7200d2e85e6f.tar.gz
Version 0.0.1997.04.16
-rwxr-xr-xlib/libtrace.so.1bin19156 -> 19423 bytes
-rw-r--r--src/libtrace/TODO10
-rw-r--r--src/libtrace/init_libtrace.c13
-rw-r--r--src/libtrace/print_results.c20
4 files changed, 33 insertions, 10 deletions
diff --git a/lib/libtrace.so.1 b/lib/libtrace.so.1
index 888518c..3b5a73e 100755
--- a/lib/libtrace.so.1
+++ b/lib/libtrace.so.1
Binary files differ
diff --git a/src/libtrace/TODO b/src/libtrace/TODO
new file mode 100644
index 0000000..359fbc1
--- /dev/null
+++ b/src/libtrace/TODO
@@ -0,0 +1,10 @@
+* 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)
diff --git a/src/libtrace/init_libtrace.c b/src/libtrace/init_libtrace.c
index 435e6da..dd38239 100644
--- a/src/libtrace/init_libtrace.c
+++ b/src/libtrace/init_libtrace.c
@@ -147,8 +147,18 @@ static int reentrant=0;
static void print_results(u_long arg);
+void kk(void)
+{
+ char buf[1024];
+ sprintf(buf, "-> %s\n", pointer_tmp->name);
+ _sys_write(fd,buf,strlen(buf));
+}
+
static void new_func(void)
{
+#if 1
+ kk();
+#endif
if (reentrant) {
#if 0
_sys_write(fd,"reentrant\n",10);
@@ -166,8 +176,9 @@ _sys_write(fd,"reentrant\n",10);
/* This is only to avoid a GCC warning; shouldn't be here:
*/
- where_to_return = returned_value = (u_long)print_results;
+ where_to_return = (long)print_results;
+ /* HCK: Is all these stuff about 'ebp' buggy? */
__asm__ __volatile__(
"movl %ebp, %esp\n\t"
"popl %ebp\n\t"
diff --git a/src/libtrace/print_results.c b/src/libtrace/print_results.c
index 92758ff..fe675b5 100644
--- a/src/libtrace/print_results.c
+++ b/src/libtrace/print_results.c
@@ -150,15 +150,17 @@ static struct debug_functions functions_info[] = {
{"setvbuf", _TYPE_INT, 4, {_TYPE_ADDR, _TYPE_ADDR, _TYPE_INT, _TYPE_UINT, 0}},
{"sigaction", _TYPE_INT, 3, {_TYPE_INT, _TYPE_ADDR, _TYPE_ADDR, 0, 0}},
{"sleep", _TYPE_UINT, 1, {_TYPE_UINT, 0, 0, 0, 0}},
- {"sprintf", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"sscanf", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"strcasecmp", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"stpcpy", _TYPE_STRING,2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"strcmp", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"strcoll", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"strcspn", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
- {"strdup", _TYPE_STRING,1, {_TYPE_STRING, 0, 0, 0, 0}},
- {"strerror", _TYPE_STRING,1, {_TYPE_INT, 0, 0, 0, 0}},
+ {"sprintf", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING}},
+ {"sscanf", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING}},
+ {"strcasecmp", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING}},
+ {"stpcpy", _TYPE_STRING,2, {_TYPE_STRING, _TYPE_STRING}},
+ {"strcmp", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING}},
+ {"strcpy", _TYPE_STRING,2, {_TYPE_STRING, _TYPE_STRING}},
+ {"strcoll", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING}},
+ {"strcspn", _TYPE_INT, 2, {_TYPE_STRING, _TYPE_STRING}},
+ {"strdup", _TYPE_STRING,1, {_TYPE_STRING}},
+ {"strerror", _TYPE_STRING,1, {_TYPE_INT}},
+ {"strncmp", _TYPE_INT, 3, {_TYPE_STRING, _TYPE_STRING, _TYPE_INT}},
{"strpbrk", _TYPE_STRING,2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},
{"strrchr", _TYPE_STRING,2, {_TYPE_STRING, _TYPE_CHAR, 0, 0, 0}},
{"strspn", _TYPE_UINT, 2, {_TYPE_STRING, _TYPE_STRING, 0, 0, 0}},