Các công cụ bình thường mà bạn sử dụng để phát triển phần mềm :)
Thông thường hàm API không có giấy tờ chỉ là rằng, không có cơ sở , và không thực sự ẩn cẩn thận bí mật.
Thiết kế API bằng chứng trong tương lai rất khó - bạn có thể dễ dàng thêm nội dung vào API, nhưng thực sự rất khó để xóa bất kỳ thứ gì (mà không phá vỡ một số khách hàng). Vì vậy, bạn rất cẩn thận khi thêm bất cứ thứ gì vào API. Đó là lý do tại sao có thể có một số chức năng bổ sung (để thử nghiệm, trong quá trình phát triển, hack nhanh?) Trong API, không được ghi lại và không đảm bảo hoạt động hoặc có mặt trong phiên bản tiếp theo.
Các hàm không có giấy tờ này có thể được tìm thấy một cách dễ dàng, cho bạn biết cách trình biên dịch, trình liên kết, thư viện và trình gỡ lỗi hoạt động (công cụ lập trình hệ thống). Biết ngôn ngữ lắp ráp của kiến trúc đích sẽ không bị tổn thương. Nếu IDE / trình biên dịch của bạn có thể xây dựng các tệp thực thi đang hoạt động, bạn cũng có thể thực hiện "thủ công" đó và để mắt mở trên đường dẫn đó bạn có thể khám phá một số tính năng ẩn :)
Ví dụ trong môi trường Unix: Một kịch bản trong đó chúng tôi chỉ có tài liệu cho chức năng printf và muốn biết liệu có một số chức năng giống như printf khác không . Chuyến tàu tư tưởng có thể đi một cái gì đó như:
1. Kiểm tra tệp tiêu đề
$ 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. Kiểm tra thư viện
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Chức năng thư viện tháo rời
$ 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)
Hoặc điều tương tự...