Обычные инструменты, которые вы используете для разработки программного обеспечения :)
Обычно недокументированные 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)
Или что-то вроде того...