Thursday, March 11, 2010

සිංහලෙන් win32 Portable Executable format

මෙම ලිපියෙන් ලිවීමට බලාපොරොත්තු වනුයේ win32 Portable Executable format යනුවෙන් හදුන්වන්නේ කුමක්ද යන්නත් මෙතෙක් ලියු ලිපි වල සාරාංශයක් ඉදිරිපත් කිරීමටත්ය.





සිං
හලෙන් win32 Portable Executable format - part 9 සදහා මීට පෙර ලිපියට යන්න.


මෙය විස්තර කිරීම සදහා නිශ්චිත ක්‍රමයක් නොමැත. එම නිසා මා දන්නා පමණනින් විස්තර කිරීම‍ට බලාපොරොත්තු වෙන්නෙමි. මෙම file format එක COFF (Common Object File Format) ලෙසද හදුන්වන ස්ථානද දක්නට ඇත. මෙය Microsoft ආයතනය විසින් පමණක් නිර්මානය කරන ලද්දක් නොවන අතර Intel, Borland, Watcom, IBM වැනි ආයතන කිහිපයක්ද එකතුව නිර්මානය කරන ලද්දකි.
මෙයටද වෙනත් file වර්ග(.html, .zip, .bmp වැනි) වලට මෙන්ම ආවේනික රටාවක් තිබේ. මෙම format එකට සකසන files .exe, .dll, .ocx, .cpl, .sys වැනි extenstions වලින් තිබිය හැක.

PE එකක් යනු compiler එකක් මගින් සකසන ලද file එකක් වේ. එය අපට නිර්මානය කිරීමට අපහසුය. අපට win32 executable එකක් සැකසීමට නම් PE format එක ගැනත් Linker එකක ක්‍රියාවලියත් යන 2ම ගැන හොද අවබෝධයක් තිබිය යුතුය. ඊ‍ට අමතරව library file වල ඇති functions ගැනත්, ඒවායේ කාර්යයන් ගැනත් හොද අවබෝධයක් තිබිය යුතුය.

මෙම ලිපි මාලාවේ පැහැදිලි කිරීම් සදහා calc.exe හා shell32.dll (අනවසරයෙන්)යොදා ගෙන ඇත.

PE file එකක් සැකසීමට 0 සිට 255 (ASCII Code) දක්වා ඇති සියලුම අකුරැ භාවිතයට ගනී. එම නිසා ඒවා text editor එකකින් කියවිය නොහැක. ඒවා කියවීමට නම් එය hex editor එකකින් විවෘත කර ගත යුතුය.

Source එක හා output එක පමණක් සැලකූ විට,

html source file එකක් web browser එකක් මගින් විවෘත කල විට එහි source එකට අනුව output එකක් නිර්මාණය කර දෙයි.



එසේම exe එකක් ක්‍රියාත්මක කල විට PE එකෙහි source එකට අදාල output එකක් අපට දැක ගත හැක.



PE format එක යනු PE එකක source එක තබා ගන්නා ආකෘතිය වේ. මෙම ලිපි මාලාවෙන් පැහැදිලි කර තිබෙනුයේ PE එකක source file එකෙහි format එක ගැනය. එය html යන language එක ගැන පැහැදිලි කිරීමක් වැනිය.
මෙහිදී සියළු පැහැදිලි කිරීම් සිදුකර ඇත්තේ අන්තර්ජාලය හරහා ලබා ගත් තොරතුරු මත හා මාගේ ස්වයං අධ්‍යයන මත ලබා ගත් කරුනු මගිනි. මෙම පැහැදිලි කිරීම් සදහා මා විසින් නිර්මාණය කරන ලද මෘදුකාංගයක් යොදා ගෙන ඇත. එය PE file එක තිබෙන ආකාරය බලා ගැනීමට හා වෙනස් කිරීමට හැකි IDE එකක් ලෙස ක්‍රියා කරයි. නමුත් මෙමගින් නව PE file එකක් නිර්මාණය කල නොහැක. මෙහිදී සිදු කරනුයේ PE එකෙහි data වෙනස් කර පිටපතක් save කිරීම පමනකි.

මෙම PE file වල magic code එක "MZ" වේ. PE එකක ව්‍යුහය පිළිබදව අන්තර්ජාලය තුල සෙවීම් කිරීමේදී විවිධ ආකාරයේ පැහැදිලි කිරීම් දක්නට තිබේ. නමුත් මෙහිදී මා පළමුව සිදු කලේ PE එක ප්‍රධාන කොටස් 3 කට වෙන් කර එය tree එකක් ආකාරයට සකසා ගැනීමයි. පළමු කොටස MS-DOS දත්ත සදහාද, දෙවන කොටස Win NT දත්ත සදහාද, තෙවන කොටස PE එකෙහි data ඇති කොටස වශයෙන්ද වෙන් කර ඇත. මෙහි පළමු කොටස් 2හි ඇති සියළු උප කොටස් සෑම PE එකකම පාහේ දක්නට ඇත.තෙවන කොටස section වල meta data හා section data යනුවෙන් තවත් කොටස් 2 කට වෙන් කර ඇත. මෙම sections .text, .rsrc, .data වැනි නම් වලින් පිහිටා තිබේ. මෙම section තුල data අඩංගු tables පිහිටා ඇත. ඒවා import table, export table, resource table වැනි නම් වලින් පිහිටා ඇත. මෙම table තුල භාවිතා කරන දත්ත, executable code එක, වෙනත් library තුලින් import කල යුතු functions ගැන විස්තර ආදිය තිබේ.

මෙහි PE එකෙහි ව්‍යුහය tree එකක් ආකාරයට දක්වා ඇත.