Звичайні інструменти, які ви використовуєте для розробки програмного забезпечення :)
Зазвичай незадокументовані функції API - це саме такі, недокументовані та не дуже ретельно приховані секрети.
Створювати майбутній API підтвердження важко - ви можете легко додавати речі в API, але видалити щось дійсно важко (не порушуючи деяких клієнтів). Отже, ви дуже обережні, додаючи що-небудь в API. Ось чому в API можуть бути деякі додаткові функції (для тестування, розробки, швидкого злому?), Які не задокументовані та не мають гарантій працювати або бути там у наступній версії.
Ці недокументовані функції можна знайти дещо легко, враховуючи, як працюють компілятори, лінкери, бібліотеки та налагоджувачі (програмне забезпечення системного програмування). Знання мови складання цільової архітектури не зашкодить. Якщо ваш IDE / компілятор може створити працюючі виконувані файли, ви також можете зробити це "вручну", і, не відводячи очей на цьому шляху, ви можете виявити деякі приховані функції :)
Приклад у середовищі Unix: сценарій, у якому у нас є документація лише для функції printf, і ми хотіли б знати, чи є якісь інші функції, схожі на printf . Потяг думки може мати щось на кшталт:
1. Перевірте заголовки файлів
$ 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. Перевірте бібліотеку
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Розберіть функцію бібліотеки
$ 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)
Або щось подібне ...