Ferramentas normais que você usa para desenvolver software :)
Normalmente, as funções da API não documentadas são apenas isso, não documentadas e não realmente escondidas com cuidado.
Criar uma API à prova do futuro é difícil - você pode facilmente adicionar itens à API, mas é realmente difícil remover qualquer coisa (sem quebrar alguns clientes). Portanto, tenha muito cuidado ao adicionar qualquer coisa à API. É por isso que pode haver algumas funções extras (para testar, em desenvolvimento, um hack rápido?) Na API, que não estão documentadas e sem garantias de trabalhar ou estar presente na próxima versão.
Essas funções não documentadas podem ser encontradas com alguma facilidade, desde que você saiba como os compiladores, vinculadores, bibliotecas e depuradores funcionam (material de programação do sistema). Saber a linguagem assembly da arquitetura de destino não será prejudicial. Se o seu IDE / compilador puder criar executáveis funcionais, você poderá fazer isso "manualmente" também e, mantendo os olhos abertos nesse caminho, poderá descobrir alguns recursos ocultos :)
Exemplo no ambiente Unix: um cenário em que temos documentação apenas para a função printf e gostaríamos de saber se existem outras funções semelhantes a printf . Linha de pensamento pode ser algo como:
1. Verifique os arquivos de cabeçalho
$ 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. Verifique a biblioteca
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Desmonte a função de biblioteca
$ 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)
Ou algo assim...