Normalne narzędzia, których używasz do tworzenia oprogramowania :)
Zwykle nieudokumentowane funkcje API to tylko nieudokumentowane i niezbyt starannie ukryte tajemnice.
Zaprojektowanie przyszłego API jest trudne - możesz łatwo dodawać różne elementy do API, ale naprawdę trudno jest cokolwiek usunąć (nie psując niektórych klientów). Dlatego bardzo ostrożnie dodajesz cokolwiek do API. Dlatego mogą istnieć dodatkowe funkcje (do testowania, rozwoju, szybki hack?) W API, które nie są udokumentowane i nie mają gwarancji działania lub bycia w następnej wersji.
Te nieudokumentowane funkcje można znaleźć dość łatwo, biorąc pod uwagę, jak działają kompilatory, konsolidatory, biblioteki i debuggery (programowanie systemu). Znajomość języka asemblera architektury docelowej nie zaszkodzi. Jeśli Twój IDE / kompilator potrafi budować działające pliki wykonywalne, możesz to zrobić również „ręcznie”, mając oczy otwarte na tej ścieżce, możesz odkryć pewne ukryte funkcje :)
Przykład w środowisku Unix: scenariusz, w którym mamy dokumentację tylko dla funkcji printf i chcielibyśmy wiedzieć, czy są jakieś inne funkcje podobne do printf . Ciąg myśli może przebiegać następująco:
1. Sprawdź pliki nagłówków
$ 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. Sprawdź bibliotekę
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Zdemontować funkcję biblioteki
$ 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)
Czy jakoś tak...