ไฟล์ PDB คืออะไร??
ไฟล์ที่มีนามสกุล .pdb คือไฟล์ฐานข้อมูลของโปรแกรมที่มีข้อมูลการดีบักสำหรับโปรแกรมที่คอมไพล์แล้ว (EXE/DLL) ไฟล์ PDB ถูกสร้างขึ้นโดย Microsoft Compilers เมื่อโปรแกรมแอปพลิเคชันถูกคอมไพล์ในโหมดดีบัก การมีไฟล์ PDB สามารถช่วยในการทำวิศวกรรมย้อนกลับไฟล์ปฏิบัติการได้ เนื่องจากไฟล์ดังกล่าวมีข้อมูลที่สำคัญเกี่ยวกับสัญลักษณ์ทั้งหมดของโมดูล ด้วยเหตุนี้ไฟล์เหล่านี้จึงถูกแยกออกจากไฟล์ปฏิบัติการขั้นสุดท้าย DgbHelp API ของ Microsoft สามารถเปิดไฟล์ PDB เพื่อรับข้อมูล เช่น การเผยแพร่และการส่งออก สัญลักษณ์ส่วนกลาง สัญลักษณ์ท้องถิ่น พิมพ์ข้อมูล ไฟล์ต้นฉบับ และหมายเลขบรรทัด
รูปแบบไฟล์ PDB
PDB เป็นรูปแบบไฟล์ที่เป็นกรรมสิทธิ์ของ Microsoft และยังไม่มีการบันทึกไว้อย่างเป็นทางการในที่ใดๆ อย่างไรก็ตาม เอกสารเริ่มต้นมีให้ ที่นี่ และอ้างอิงได้
สตรีม PDB
ไฟล์ PDB ประกอบด้วยหลายสตรีมโดยแต่ละสตรีมทำหน้าที่เป็นไฟล์เสมือนแต่ละไฟล์และมีข้อมูล ตัวเขียนไฟล์ PDB สามารถเขียนไปยังไฟล์เหล่านี้ได้ และไฟล์จะเสร็จสิ้นหลังจากมีการคอมมิตที่ชัดเจนเท่านั้น คอมไพเลอร์สามารถเขียนไฟล์ PDB ต่อไปได้ แต่คอมไพล์เฉพาะเมื่อโค้ดผู้ใช้ทั้งหมดคอมไพล์สำเร็จ ไฟล์ PDB ประกอบด้วยสตรีมต่อไปนี้:
Stream No. | สารบัญ | คำอธิบายสั้นๆ |
---|---|---|
1 | Pdb (ส่วนหัว) | ข้อมูลเวอร์ชัน และข้อมูลเพื่อเชื่อมต่อ PDB นี้กับ EXE |
2 | Tpi (ตัวจัดการประเภท) | ทุกประเภทที่ใช้ในการปฏิบัติการ |
3 | Dbi (ข้อมูลการแก้ไขจุดบกพร่อง) | ระงับส่วนสนับสนุน และรายการของ ‘Mods’ |
4 | NameMap | ถือตารางสตริงที่แฮช |
4-(น+4) | n Mod’s (ข้อมูลโมดูล) | สตรีม Mod แต่ละรายการมีสัญลักษณ์และหมายเลขบรรทัดสำหรับหนึ่งคอมไพแลนด์ |
n+4 | แฮชสัญลักษณ์ส่วนกลาง | ดัชนีที่อนุญาตให้ค้นหาในสัญลักษณ์ส่วนกลางตามชื่อ |
n+5 | แฮชสัญลักษณ์สาธารณะ | ดัชนีที่อนุญาตให้ค้นหาในสัญลักษณ์สาธารณะตามที่อยู่ |
n+6 | บันทึกสัญลักษณ์ | บันทึกสัญลักษณ์จริงของสัญลักษณ์สากลและสาธารณะ |
n+7 | พิมพ์แฮช | แฮชที่ใช้โดยสตรีม TPI |
แต่ละสตรีมในไฟล์ PDB ประกอบด้วยหน้าหลายหน้าซึ่งไม่จำเป็นต้องเรียงลำดับหมายเลข
ส่วนหัว PDB
ไฟล์ PDB มีส่วนหัวที่ประกอบด้วยลายเซ็นสำหรับการระบุและตรวจสอบความถูกต้องของรูปแบบเฉพาะ ความยาวของลายเซ็นขึ้นอยู่กับรูปแบบ PDB ส่วนหัวอาจยาวกว่าหนึ่งหน้า
ข้อมูลเมตาของ PDB
ข้อมูลเมตาของ PDB มีหน้าที่จดจำสตรีมคอมโพเนนต์ทั้งหมด โดยให้ความยาวและลำดับของหน้าสำหรับแต่ละสตรีม คำสั่งจะถูกส่งไปยังสตรีมอย่างต่อเนื่อง เริ่มต้นด้วย 0 นอกจากนี้ยังมีรูทสตรีมที่ไม่ได้เรียงลำดับซึ่งมีข้อมูลเมตาบางส่วน