protect

ถ้าเอาบทความไปเผยแพร่แล้วไม่ให้เครดิต ดำเนินคดีด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ขั้นสูงสุดและไม่ยอมความครับ

วันศุกร์ที่ 30 ตุลาคม พ.ศ. 2558

Assembly Module : ตอนที่ 5 TypeDef table และสมาชิก (3)


เรามาต่อจาก บทความที่แล้วกันเลย ด้วยตัวอย่าง code จากบทความที่แล้ว ผมแสดงให้ดูถึงรายละเอียดของ Table TypeDef ไปแล้วในบทความนี้จะมาพูดถึงรายละเอียดของ table อื่นๆ ที่สัมพันธ์กับ table TypeDef กันครับ

จาก execute file ที่ได้จากตัวอย่างบทความที่แล้ว ถ้าเราเปิดด้วย ILDasm แล้วไปที่เมนู View -> MetaInfo -> Show!

ลองเลื่อนรายละเอียดของ metadata มาจนถึงรูปข้างล่างครับ



Method #1 (06000001)  จะเป็นสมาชิกของ table TypeDef
   #1 จะหมายถึง Index ของ method แล้วจะมีค่าบวกไปเรื่อยๆ สำหรับ method ถัดไป
   06000001 โดยที่ตัวเลข 06 ที่อยู่ข้างหน้า เป็น reference code สำหรับ runtime เพื่อให้ runtime ทราบขณะกำลัง compile ว่านี้คือ table MethodDef แน่นอนครับตัวเลขที่เป็นตัวเลขฐาน 16

ส่วนรายละเอียดข้างล่าง ของ Method #1 (06000001) ผมจะอธิบายเป็นบางส่วนก่อน ส่วนที่ยังไม่อธิบายจะไปอธิบายในบทความถัดๆ ไปน่ะครับ

MethodName 
จากตัวอย่างในรูปคือ .ctor หมายถึงเป็น constructor ก็คือมีชื่อเดียวกับชื่อของ TypeDef

Flags
บอกให้รู้ว่า method นี้มี flags อะไรบ้าง เช่น public (ส่วน flags ชนิดอื่น ผมจะอธิบายในส่วนถัดไปน่ะครับ)

RVA (Relative Virtual Address)
เป็น address ที่เก็บ IL code ของ method นี้ หมายความว่าเมื่อ runtime ทำงาน runtime จะไป compile IL code ของ method ที่ address 0x00002050 (ยังจำได้ไหมครับ managed execute file แบ่งออกเป็น 4 ส่วน สามารถย้อนไปอ่านได้ที่นี้ครับ)

ImplFlags
เป็น falgs ที่บอกว่า method นี้ถูก implement มาอย่างไร ในตัวอย่างหมายความว่า method นี้เป็นชนิด IL และสามารถ manage ได้

ReturnType
จากตัวอย่างเป็น Void คือ ไม่มีค่า return กลับ

No arguments
ไม่มีพารามิเตอร์สำหรับ method นี้ 

ที่นี้เราลองมาดู method Main กันบ้างน่ะครับ




 ใน method Main จะสังเกตุเห็นคำว่า [ENTRYPOINT] ซึ่งเป็นตัวบอก runtime ว่านี้เป็น method แรกเมื่อมีการ execute โปรแกรม 
RVA : 0x000020c2 บอกให้รู้ตำแหน่งของ IL code ของ entrypoint 
1 Arguments คือ method นี้ต้องการ 1 พารามิเตอร์ โดยมี Type SZArray ที่เก็บค่า string ของ Array
Signature : 00 01 01 1d 0e เป็น index ที่ชี้ไปที่ table ParamDef 
1 Parameters เป็นรายละเอียดของ table ParamDef ที่เกี่ยวกับ parameter นี้ จำนวน parameter จะเท่ากับจำนวน Arguments เสมอ

 พบกันใหม่บทความหน้าครับ
TuChay 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น