Normale Tools, mit denen Sie Software entwickeln :)
Normalerweise sind undokumentierte API-Funktionen genau das, undokumentiert und nicht wirklich sorgfältig verborgene Geheimnisse.
Das Entwerfen einer zukunftssicheren API ist schwierig - Sie können problemlos Inhalte zur API hinzufügen, aber es ist wirklich schwierig, etwas zu entfernen (ohne einige Clients zu beschädigen). Sie werden also sehr vorsichtig, wenn Sie etwas zur API hinzufügen. Aus diesem Grund gibt es in der API möglicherweise einige zusätzliche Funktionen (zum Testen, in der Entwicklung, für einen schnellen Hack?), Die nicht dokumentiert sind und keine Garantie dafür haben, dass sie funktionieren oder in der nächsten Version vorhanden sind.
Diese undokumentierten Funktionen lassen sich leicht finden, wenn Sie wissen, wie Compiler, Linker, Bibliotheken und Debugger funktionieren (Systemprogrammierung). Die Kenntnis der Assemblersprache der Zielarchitektur schadet nicht. Wenn Ihre IDE / Ihr Compiler funktionierende ausführbare Dateien erstellen kann, können Sie dies auch "manuell" tun. Wenn Sie diesen Pfad offen halten, werden Sie möglicherweise einige versteckte Funktionen entdecken :)
Beispiel in einer Unix-Umgebung: Ein Szenario, in dem wir nur Dokumentation für die printf- Funktion haben und wissen möchten, ob es andere printf- ähnliche Funktionen gibt. Der Gedankengang könnte ungefähr so aussehen:
1. Überprüfen Sie die Header-Dateien
$ grep printf /usr/include/stdio.h | head -5
extern int fprintf (FILE *__restrict __stream,
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
extern int vprintf (__const char *__restrict __format, _G_va_list __arg);
2. Überprüfen Sie die Bibliothek
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Zerlegen Sie die Bibliotheksfunktion
$ objdump -S /usr/lib/libc.a | grep -A 10 '_fwprintf' | head
00000000 <__fwprintf>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 8d 45 10 lea 0x10(%ebp),%eax
6: 83 ec 0c sub $0xc,%esp
9: 89 44 24 08 mov %eax,0x8(%esp)
d: 8b 45 0c mov 0xc(%ebp),%eax
10: 89 44 24 04 mov %eax,0x4(%esp)
14: 8b 45 08 mov 0x8(%ebp),%eax
17: 89 04 24 mov %eax,(%esp)
Oder etwas ähnliches...