Outils normaux que vous utilisez pour développer des logiciels :)
Habituellement, les fonctions d'API non documentées ne sont que des secrets non documentés et pas vraiment soigneusement cachés.
La conception d'une API à l'épreuve du temps est difficile - vous pouvez facilement ajouter des éléments dans l'API, mais il est vraiment difficile de supprimer quoi que ce soit (sans casser certains clients). Ainsi, vous faites très attention lorsque vous ajoutez quoi que ce soit dans l'API. C'est pourquoi il peut y avoir des fonctions supplémentaires (pour les tests, en développement, un hack rapide?) Dans l'API, qui ne sont pas documentées et sans garantie de travailler ou d'être là dans la prochaine version.
Ces fonctions non documentées peuvent être trouvées assez facilement, étant donné que vous savez comment fonctionnent les compilateurs, les éditeurs de liens, les bibliothèques et les débogueurs (programmation système). La connaissance du langage d'assemblage de l'architecture cible ne fera pas de mal. Si votre IDE / compilateur peut créer des exécutables qui fonctionnent, vous pouvez également le faire "manuellement", et en gardant les yeux ouverts sur ce chemin, vous découvrirez peut-être des fonctionnalités cachées :)
Exemple dans un environnement Unix: Un scénario où nous n'avons de documentation que pour la fonction printf et aimerions savoir s'il existe d'autres fonctions semblables à printf . Le train de pensée pourrait aller quelque chose comme:
1. Vérifier les fichiers d'en-tête
$ 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. Vérifier la bibliothèque
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Démonter la fonction de bibliothèque
$ 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 quelque chose comme ça...