Alat normal yang Anda gunakan untuk mengembangkan perangkat lunak :)
Biasanya fungsi-fungsi API tidak terdokumentasi hanya itu, rahasia-rahasia tidak terdokumentasi , dan tidak benar-benar tersembunyi.
Mendesain API bukti di masa depan sulit - Anda dapat dengan mudah menambahkan hal-hal ke dalam API, tetapi sangat sulit untuk menghapus apa pun (tanpa menghancurkan beberapa klien). Jadi, Anda sangat berhati-hati saat menambahkan sesuatu ke API. Itu sebabnya mungkin ada beberapa fungsi tambahan (untuk pengujian, dalam pengembangan, peretasan cepat?) Di API, yang tidak didokumentasikan dan tanpa jaminan bekerja atau berada di sana di versi berikutnya.
Fungsi-fungsi tidak berdokumen ini dapat ditemukan dengan agak mudah, mengingat Anda tahu bagaimana kompiler, tautan, pustaka, dan debugger berfungsi (hal-hal pemrograman sistem). Mengetahui bahasa assembly dari arsitektur target tidak ada salahnya. Jika IDE / kompiler Anda dapat membangun executable yang berfungsi, Anda dapat melakukannya "secara manual" juga, dan dengan tetap membuka mata di jalur itu Anda mungkin menemukan beberapa fitur tersembunyi :)
Contoh dalam lingkungan Unix: Skenario di mana kita memiliki dokumentasi hanya untuk fungsi printf dan ingin tahu apakah ada beberapa fungsi seperti printf lainnya . Kereta pikiran mungkin seperti:
1. Periksa file header
$ 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. Periksa perpustakaan
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Bongkar fungsi perpustakaan
$ 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)
Atau semacam itu...