เครื่องมือปกติที่คุณใช้พัฒนาซอฟต์แวร์ :)
ฟังก์ชั่น API ที่ไม่มีเอกสารมักจะเป็นเพียงความลับที่ไม่มีเอกสารและไม่ได้ซ่อนอย่างลับๆ
การออกแบบ API การพิสูจน์ในอนาคตนั้นยาก - คุณสามารถเพิ่มสิ่งต่างๆลงใน API ได้อย่างง่ายดาย แต่เป็นการยากที่จะลบสิ่งใด ๆ ออกไป (โดยไม่ทำให้ลูกค้าบางรายแตก) ดังนั้นคุณจะต้องระมัดระวังเป็นอย่างมากเมื่อทำการเพิ่มอะไรเข้าไปใน API นั่นเป็นเหตุผลที่อาจมีฟังก์ชั่นพิเศษบางอย่าง (สำหรับการทดสอบการพัฒนาแฮ็คด่วน) ใน API ซึ่งไม่ได้จัดทำเป็นเอกสารและไม่มีการรับประกันว่าจะทำงานหรืออยู่ที่นั่นในเวอร์ชั่นถัดไป
ฟังก์ชั่นที่ไม่มีเอกสารเหล่านี้สามารถพบได้ง่ายนักเนื่องจากคุณรู้ว่าคอมไพเลอร์, ลิ้งค์, ไลบรารี่และดีบั๊กเกอร์ทำงานอย่างไร รู้ภาษาประกอบของสถาปัตยกรรมเป้าหมายจะไม่เจ็บ หาก IDE / คอมไพเลอร์ของคุณสามารถสร้างไฟล์ปฏิบัติการที่ใช้งานได้คุณสามารถทำ "ด้วยตนเอง" ด้วยและเปิดตาบนเส้นทางนั้นคุณอาจค้นพบคุณสมบัติที่ซ่อนอยู่ :)
ตัวอย่างในสภาพแวดล้อม Unix: สถานการณ์ที่เรามีเอกสารสำหรับฟังก์ชั่นprintfเท่านั้นและต้องการทราบว่ามีฟังก์ชั่นเหมือนprintfอื่นหรือไม่ รถไฟแห่งความคิดอาจไปบางอย่างเช่น:
1. ตรวจสอบไฟล์ส่วนหัว
$ 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. ตรวจสอบห้องสมุด
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. ถอดฟังก์ชั่นห้องสมุด
$ 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)
หรืออะไรทำนองนั้น ...