Herramientas normales que utiliza para desarrollar software :)
Por lo general, las funciones de API indocumentadas son solo eso, indocumentados , y no secretos ocultos realmente cuidadosos.
Diseñar una API a prueba de futuro es difícil: puede agregar fácilmente cosas a la API, pero es realmente difícil eliminar cualquier cosa (sin romper algunos clientes). Entonces, tienes mucho cuidado al agregar algo a la API. Es por eso que puede haber algunas funciones adicionales (para pruebas, en desarrollo, ¿un truco rápido?) En API, que no están documentadas y sin garantías de trabajar o estar en la próxima versión.
Estas funciones no documentadas se pueden encontrar fácilmente, dado que sabe cómo funcionan los compiladores, vinculadores, bibliotecas y depuradores (material de programación del sistema). Conocer el lenguaje ensamblador de la arquitectura de destino no hará daño. Si su IDE / compilador puede construir ejecutables que funcionen, también puede hacerlo "manualmente", y manteniendo los ojos abiertos en esa ruta puede descubrir algunas características ocultas :)
Ejemplo en un entorno Unix: un escenario en el que tenemos documentación solo para la función printf y nos gustaría saber si hay otras funciones similares a printf . El tren de pensamiento podría ser algo como:
1. Verifique los archivos de encabezado
$ 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. Comprobar biblioteca
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Desmontar la función 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)
O algo así...