Strumenti normali che usi per sviluppare software :)
Di solito le funzioni API non documentate sono solo segreti nascosti e non documentati .
Progettare un'API a prova di futuro è difficile: puoi facilmente aggiungere elementi all'API, ma è davvero difficile rimuovere qualsiasi cosa (senza rompere alcuni client). Quindi, fai molta attenzione quando aggiungi qualcosa nell'API. Ecco perché potrebbero esserci alcune funzioni extra (per test, in sviluppo, un hack rapido?) Nell'API, che non sono documentate e senza garanzie di funzionamento o presenza nella prossima versione.
Queste funzioni non documentate possono essere trovate in qualche modo facilmente, dato che sai come funzionano compilatori, linker, librerie e debugger (roba di programmazione del sistema). Conoscere il linguaggio di assemblaggio dell'architettura target non farà male. Se il tuo IDE / compilatore è in grado di creare eseguibili funzionanti, puoi farlo anche "manualmente" e, tenendo gli occhi aperti su quel percorso, potresti scoprire alcune funzionalità nascoste :)
Esempio in ambiente Unix: uno scenario in cui abbiamo documentazione solo per la funzione printf e vorrei sapere se ci sono altre funzioni simili a printf . Il treno del pensiero potrebbe andare come:
1. Controlla i file di intestazione
$ 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. Controlla la libreria
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Disassemblare la funzione di libreria
$ 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)
O qualcosa di simile...