protect
ถ้าเอาบทความไปเผยแพร่แล้วไม่ให้เครดิต ดำเนินคดีด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ขั้นสูงสุดและไม่ยอมความครับ
วันจันทร์ที่ 19 ตุลาคม พ.ศ. 2558
Assembly Module : ตอนที่ 5 ModuleDef table
Table แรกและเป็น table ที่สำคัญในส่วนของ Definition table คือ ModuleDef เป็น table ที่เก็บรายละเอียดของ module ได้แก่
1) ชื่อของ module และนามสกุลของ module
เราสามารถแก้ไขชื่อและนามสกุลในส่วนของ table ModuleDef ได้แต่เนื่องจากมีหลาย table ใน metadata ทำการ link ไปที่ข้อมูลของ ModuleDef เพื่อป้องกันความผิดพลาดในการทำ runtime จึงไม่ควรเปลี่ยนชื่อและนามสกุลใน ModuleDef โดยเด็ดขาด
2) MVID - Module Version Identifier
จะเป็นค่า uniqe ที่จะไม่ซ้ำกันและค่าจะเปลี่ยนไปเรื่อยๆ ทุกๆ ครั้งที่มีการ compile code แม้แต่ code เดียวกันถ้า compile code 2 ครั้ง ค่า MVID ทั้งสองครั้งก็จะมีค่าไม่เหมือนกัน รูปแบบของ MVID จะเป็นรูปแบบเดียวกับ GUID โดยมีการ checksums เพื่อนำมาสร้างค่า MVID
ที่ .Net Framework มีเปลี่ยนแปลงค่า MVID ทุกครั้งที่มีการ compile code เป็นเพราะว่า โดยปกติบริษัทที่จำหน่าย software มักจะมีบริษัทที่สาม (Third party company) หรืออาจจะเป็นแผนกตรวจสอบคุณภาพ (QC) ภายในบริษัท จะทำหน้าที่ตรวจสอบคุณภาพและรับประกันคุณภาพของ software ก่อนที่ software จะถูกนำออกจำหน่าย หน้าที่นี้รวมถึงการตรวจสอบ source code ดังนั้นบริษัทที่สามต้องการยืนยันว่า code ที่ได้มาตรงกับ execute file ที่กำลังตรวจสอบ, ทดสอบ และ เตรียมตัวที่จะจำหน่าย ดังนั้นรหัส MVID จึงเป็นตัวช่วยในระบบการตรวจสอบได้ถูกต้องแม่นยำ
ในหนึ่ง module จะมี table นี้แค่เพียง table เดียวเท่านั้น
จากตัวอย่าง code ของตอนที่ 2 เราสามารถดูข้อมูลของ ModuleDef ได้ด้วย ILDasm และเลือกที่เมนู View แล้วเลือก MetaInfo แล้วเลือก Show! จะได้ดังรูป
ข้อมูลในกรอบสีแดงคือข้อมูลใน table ModuleDef จริงๆ แล้ว metadata จะเก็บข้อมูลในรูปแบบ table แต่ข้อจำกัดในเรื่องการแสดงผลของ ILDasm จึงไม่สามารถแสดงผลในรูปแบบของตารางได้ ILDasm จึงแสดงข้อมูลในตารางทั้งหมดออกมาดังรูปข้างบน
นอกจากนี้เรายังสามารถดู MVID ผ่าน ทาง command ได้ด้วยคำสั่ง
c:\>ildasm /all /text Program.exe | find /v "// Time-date stamp:" | find /v "// MVID" | find /v "// Checksum:" > Program.txt
คำสั่งข้างบนจะเป็นการดึงข้อมูลของ header ใน manage file แล้วบันทึกลงใน text file จากตัวอย่าง text file ของเราคือ Program.txt ดังนั้นเราจึงสามารถ compare ข้อมูลใน header file ด้วยคำสั่ง fc ลองดูตัวอย่างวิธีการใช้ตามรูปข้างล่างน่ะครับ
บทความหน้าพบกับ table ที่ 2 ของ Definition table ครับ ซึ่งจะเป็น table อะไรนั้น .... พบกันใหม่บทความหน้าครับ
TuChay
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น