මෙම ලිපියෙන් ලිවීමට බලාපොරොත්තු වනුයේ 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 එකක් ආකාරයට දක්වා ඇත.
Thursday, March 11, 2010
Wednesday, March 10, 2010
සිංහලෙන් win32 Portable Executable format - part 9
පසුගිය සතියේ RT_DIALOG පිළිබදව විස්තර කිරීමක් සිදු කර ඇත. තවද dialog එකක් තුල ඇති Object classes කිහිපයක් ගැනද, ඒවායේ attribute ගැනද සදහන් කර ඇත. මේ සතියේ තවත් Object classes කිහිපයක් ගැන සදහන් කිරීමට බලාපොරොත්තු වෙමි.
COMBO BOX
msctls_trackbar32
msctls_updown32
msctls_progress32
SysListView32
SysTreeView32
SysTabControl32
SysAnimate32
RichEdit20A
SysDateTimePick32
SysMonthCal32
ComboBoxEx32
object සදහා වන Styles හා ExStyles යෙදිය හැකි අගයන් ඉහත දක්වා තිබේ. මීගලට ඇති 4 bytes මගින් දක්වනු ලබන්නේ එම object එක තිබෙන ස්ථානයේ x හා y ඛණ්ඩාංකයන් වේ. මිලග 4 bytes මගින් දක්වා ඇත්තේ එම object එකෙහි පළල හා උස වේ. මෙම අගයන් පික්සල්(px) මගින් දක්වා ඇත. මීලග 4 bytes මගින් පෙන්වනු ලබන්නේ Object එකෙහි ID එක වේ. මීලගට ඇති 2 bytes මගින් 0xFFFF පෙන්නුම් කර ඇත්නම් එමගින් කියවෙනුයේ ඉන් පසුව ඇති 2 bytes මගින් Object class එකට අදාල අංකය දක්වා ඇති බවය. එසේ නොමැති නම් පසුව ඇත්තේ එම Object එකෙහි නම වේ.
Object class වලට අදාල අංක පහත ආකාර වේ.
වෙනත් අංකයක් නම් එහි Object class එක ලෙස එම අංකයම යොදා ගනී.
මීලගට ඇති 2 bytes මගින් 0xFFFF නිරෑපනය කර ඇත්නම් එමගින් කියවනුයේ මීලගට ඇති 2 bytes මගින් අදාල Object එක හා සම්බන්ධ කර ඇති resource එකක ID එකක් වේ.
උදා:- Object එක Icon එකක් යැයි සිතන්න එවිට එයට යෙදිය යුතු Icon එකෙහි ID එක මෙහි දක්වා ඇත.
එසේ නොමැති නම් මෙහි සදහන් වනුයේ text එකකි. එය Object එකට අදාල caption එකක් විය හැක.
මෙතනින් RT_DIALOG ගැන ලියල ඉවරයි. ලබන සතියේ ලියන්නේ RT_STRING ගැනයි.
COMBO BOX
STYLE NAME | BIT # |
CBS_LOWERCASE | xviii=1 |
CBS_UPPERCASE | xix=1 |
CBS_DISABLENOSCROLL | xxi=1 |
CBS_NOINTEGRALHEIGHT | xxii=1 |
CBS_HASSTRINS | xxiii=1 |
CBS_SORT | xxiv=1 |
CBS_OEMCONVERT | xxv=1 |
CBS_AUTOHSCROLL | xxvi=1 |
CBS_OWNERDRAWVARIABLE | xxvii=1 |
CBS_OWNERDRAWFIXED | xxviii=1 |
CBS_DROPDOWNLIST | xxxi=1 And xxxii=1 |
CBS_DROPDOWN | xxxi=1 And xxxii=0 |
CBS_SIMPLE | xxxi=0 And xxxii=1 |
msctls_trackbar32
TBS_NOTHUMB | xxv=1 |
TBS_FIXEDLENGHT | xxvi=1 |
TBS_ENABLESELRANGE | xxvii=1 |
TBS_NOTICKS | xxviii=1 |
TBS_HORZ | xxxi=0 |
TBS_VERT | xxxi=1 |
TBS_AUTOTICKS | xxxii=1 |
TBS_RIGHT | xxx=0 |
TBS_BOTTOM | xxx=0 |
TBS_TOP | xxx=1 |
TBS_LEFT | xxx=1 |
TBS_BOTH | xxix=1 |
msctls_updown32
UDS_NOTHOUSANDS | xxv=1 |
UDS_HORZ | xxvi=1 |
UDS_ARROWKEYS | xxvii=1 |
UDS_AUTOBUDDY | xxviii=1 |
UDS_ALIGNLEFT | xxix=1 |
UDS_ALIGNRIGHT | xxx=1 |
UDS_SETBUDDYINT | xxxi=1 |
UDS_WRAP | xxxii=1 |
msctls_progress32
PBS_VERTICAL | xxx=1 |
PBS_SMOOTH | xxxii=1 |
SysListView32
LVS_NOSORTHEADER | xvii=1 |
LVS_NOCOLUMHEADER | xviii=1 |
LVS_NOSCROLL | xix=1 |
LVS_OWNERDATA | xx=1 |
LVS_OWNERDRAWFIXED | xxii=1 |
LVS_EDITLABELS | xxiii=1 |
LVS_AUTOARRANGE | xxiv=1 |
LVS_ALIGNTOP | xxi=0 |
LVS_ALIGNLEFT | xxi=1 |
LVS_NOLABELWRAP | xxv=1 |
LVS_SHAREIMAGELISTS | xxvi=1 |
LVS_SORTDESCENGING | xxvii=1 |
LVS_SORTASCENDING | xxviii=1 |
LVS_LIST | xxxi=1 And xxxii=1 |
LVS_SMALLICON | xxxi=1 And xxxii=0 |
LVS_REPORT | xxxi=0 And xxxii=1 |
LVS_ICON | xxxi=0 And xxxii=0 |
LVS_SHOWSELALWAYS | xxx=1 |
LVS_SINGLESEL | xxix=1 |
SysTreeView32
TVS_SHOWSELALWAYS | xxvi=1 |
TVS_DISABLEDRAGDROP | xxvii=1 |
TVS_EDITLABELS | xxviii=1 |
TVS_LINESATROOT | xxix=1 |
TVS_HASLINES | xxxi=1 |
TVS_HASBUTTONS | xxxii=1 |
SysTabControl32
TCS_FOCUSNEVER | xvii=1 |
TCS_TOOLTIPS | xviii=1 |
TCS_OWNERDRAWFIXED | xix=1 |
TCS_FOCUSONBUTTONDOWN | xx=1 |
TCS_RIGHTJUSTIFY | xxii=0 |
TCS_FIXEDWIDTH | xxii=1 |
TCS_SINGLE | xxiii=0 |
TCS_MULTILINE | xxiii=1 |
TCS_TABS | xxiv=0 |
TCS_BUTTONS | xxiv=1 |
TCS_RAGGEDRIGHT | xxi=1 |
TCS_VERTICAL | xxv=1 |
TCS_HOTTRACK | xxvi=1 |
TCS_FORCELABELLEFT | xxvii=1 |
TCS_FORCEICONLEFT | xxviii=1 |
TCS_RIGHT | xxxi=1 |
TCS_BOTTOM | xxxi=1 |
TCS_SCROLLOPPOSITE | xxxii=1 |
SysAnimate32
ACS_TIMER | xxviii=1 |
ACS_AUTOPLAY | xxix=1 |
ACS_TRANSPARENT | xxxi=1 |
ACS_CENTER | xxxii=1 |
RichEdit20A
ES_SELECTIONBAR | ix=1 |
ES_VERTICAL | x=1 |
ES_NOIME | xiii=1 |
ES_SELFIME | xiv=1 |
ES_SAVESEL | xvii=1 |
ES_SUNKEN | xviii=1 |
ES_DISABLENOSCROLL | xix=1 |
ES_WANTRETURN | xx=1 |
ES_READONLY | xxi=1 |
ES_NOHIDESEL | xxiv=1 |
ES_AUTOHSCROLL | xxv=1 |
ES_AUTOVSCROLL | xxvi=1 |
ES_PASSWORD | xxvii=1 |
ES_RIGHT | xxxi=1 And xxxii=0 |
ES_CENTER | xxxi=0 And xxxii=1 |
ES_LEFT | xxxi=0 And xxxii=0 |
ES_NOOLEDRAGDROP | xxix=1 |
ES_MULTILINE | xxx=1 |
SysDateTimePick32
DTS_RIGHTALIGN | xxvii=1 |
DTS_APPCANPARSE | xxviii=1 |
DTS_SHOWNONE | xxxi=1 |
DTS_UPDOWN | xxxii=1 |
DTS_SHORTDATEFORMAT | xxx=0 |
DTS_LONGDATEFORMAT | xxx=1 |
DTS_TIMEFORMAT | xxix=1 |
SysMonthCal32
MCS_NOTODAY | xxix=1 |
MCS_WEEKNUMBERS | xxx=1 |
MCS_MULTISELECT | xxxi=1 |
MCS_DAYSTATE | xxxii=1 |
ComboBoxEx32
CBS_LOWERCASE | xviii=1 |
CBS_UPPERCASE | xix=1 |
CBS_DISABLENOSCROLL | xxi=1 |
CBS_NOINTGRALHRIGHT | xxii=1 |
CBS_HASSTRINGS | xxiii=1 |
CBS_SORT | xxiv=1 |
CBS_OEMCONVERT | xxv=1 |
CBS_AUTOHSCROLL | xxvi=1 |
CBS_DROPDOWNLIST | xxxi=1 And xxxii=1 |
CBS_DROPDOWN | xxxi=1 And xxxii=0 |
CBS_SIMPLE | xxxi=0 And xxxii=1 |
object සදහා වන Styles හා ExStyles යෙදිය හැකි අගයන් ඉහත දක්වා තිබේ. මීගලට ඇති 4 bytes මගින් දක්වනු ලබන්නේ එම object එක තිබෙන ස්ථානයේ x හා y ඛණ්ඩාංකයන් වේ. මිලග 4 bytes මගින් දක්වා ඇත්තේ එම object එකෙහි පළල හා උස වේ. මෙම අගයන් පික්සල්(px) මගින් දක්වා ඇත. මීලග 4 bytes මගින් පෙන්වනු ලබන්නේ Object එකෙහි ID එක වේ. මීලගට ඇති 2 bytes මගින් 0xFFFF පෙන්නුම් කර ඇත්නම් එමගින් කියවෙනුයේ ඉන් පසුව ඇති 2 bytes මගින් Object class එකට අදාල අංකය දක්වා ඇති බවය. එසේ නොමැති නම් පසුව ඇත්තේ එම Object එකෙහි නම වේ.
Object class වලට අදාල අංක පහත ආකාර වේ.
0x0080 | BUTTON |
0x0081 | TEXT BOX |
0x0082 | STATIC |
0x0083 | LIST BOX |
0x0084 | SCROLLBAR |
0x0085 | COMBO BOX |
වෙනත් අංකයක් නම් එහි Object class එක ලෙස එම අංකයම යොදා ගනී.
මීලගට ඇති 2 bytes මගින් 0xFFFF නිරෑපනය කර ඇත්නම් එමගින් කියවනුයේ මීලගට ඇති 2 bytes මගින් අදාල Object එක හා සම්බන්ධ කර ඇති resource එකක ID එකක් වේ.
උදා:- Object එක Icon එකක් යැයි සිතන්න එවිට එයට යෙදිය යුතු Icon එකෙහි ID එක මෙහි දක්වා ඇත.
එසේ නොමැති නම් මෙහි සදහන් වනුයේ text එකකි. එය Object එකට අදාල caption එකක් විය හැක.
මෙතනින් RT_DIALOG ගැන ලියල ඉවරයි. ලබන සතියේ ලියන්නේ RT_STRING ගැනයි.
Tuesday, January 19, 2010
සිංහලෙන් win32 Portable Executable format - part 8
පසුගිය කලාපයේ Resource data වර්ග 3 ක් පිළිබදව විස්තර කරන ලදී. මෙවර තවත් resource data වර්ග කීපයක් ගැන විස්තර කිරීමට බලාපොරොත්තු වෙමි.
RT_DIALOG (0x00000005)
මෙහි ඇත්තේ PE එකක අපට දක්නට ඇති dialogs වේ. එනම් අප forms ලෙස හදුන්වන්නේද මේවාය. මෙම dialog එකක් තුල තවත් objects තිබිය හැක. එනම් buttons, check boxes, radio buttons ආදිය වේ. පලමුව dialog එකක structure එක හදුනා ගැනීම සිදු කරමු.
dialog වර්ග 2 ක් තිබේ. එනම් Extended Styles(ExStyles) ඇති හා නැති ඒවා ලෙසය.
මෙහි resource data හි පලමු 8 bytes 0x00000000FFFF0001 ලෙස ඇත්නම් එහි ExStyles ඇත.
මෙහි මීට පසුව ඇති පලමු 4 bytes මගින් ExStyles පෙන්නුම් කරයි. එම styles පහත ආකාරයට දැක්විය හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි ExStyle එක 0x00000000 ලෙස වේ.
මෙහි මීලග 4 bytes මගින් Window Styles පෙන්නුම් කෙරේ. එම Styles පහත ආකාරයට පෙන්නුම් කල හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි Style එක 0x80C821CC ලෙස ඇත.
මීලගට ඇති 2 bytes මගින් මෙම form එකෙහි ඇති objects ගණන දක්වා ඇත. මෙහි 0x0008 ලෙස ඇත. මීලග 2 bytes මගින් form එක පෙන්විය යුතු ස්ථානයේ X ඛන්ඩාංකය දක්වා ඇත. මෙහිදී 0x0000 වේ. මීලග 2 bytes මගින් Y ඛන්ඩාංකය දක්වා ඇත. මෙහිදී 0x0000 වේ. මීලග 2 bytes මගින් form එකෙහි width එකද ඊලග 2 bytes මගින් form එකෙහි height එකද දක්වා ඇත. මෙහිදී ඒවා 0x00E3 හා 0x005F ලෙස වේ. මීලග 2 bytes මගින් form එකට Main menu එකක් තිබේද යන වග පෙන්වයි. මෙහි අගය 0x0000 හෝ 0xFFFF නොවේ නම්, එහි ඇති අගය menu එකෙහි ID එක වේ. 0xFFFF ලෙස ඇත්නම් ඊලග 2 bytes මගින් menu ID එක පෙන්නුම් කරයි. මීලගට menu ID එක දැක්වූ ආකාරයටම class ID එක දක්වා ඇත. මෙහිදී බොහෝ විට 0x0000 ලෙස ඇත. මීලගට ඇත්තේ form එකෙහි caption එක වේ. මීලග 2 bytes මගින් form එකෙහි font size එක දක්වා ඇත. මීලග 2 bytes මගින් font weight එක දක්වා ඇත. මීලග 2 bytes මගින් italic ද යන වග දක්වා ඇත. එය 0x0001 ලෙස ඇත්නම් italic ද 0x0000 ලෙස ඇත්නම් italic නොවන බවද පෙන්නුම් කරයි. මීලගට ඇත්තේ font name එක වේ. මෙහි weight හා italic යන්න ඇත්තේ ExStyles ඇති forms වල පමණක් වේ.
මීලගට ඇත්තේ form එකෙහි objects පිළිබද විස්තර වේ. ඒවා array එකක් ලෙස ඇත. පළමුව object classes හදුනා ගනිමු.
ප්රධාන වශයෙන් classes වර්ග 6 ක් ඇත. එම classes හා ඒවාට අයත් objects පහත දක්වා ඇත.
මෙම සෑම object එකකම data ආරම්භ වනුයේ file offset එක 4 හි ගුණාකාරයක් වන ස්ථානයකිනි. එනම් මෙහි alignment එක 4 වේ. එක් object එකක් ගත් විට,
මෙහි පළමු 4 bytes මගින් ExStyles පෙන්නුම් කරයි. මෙය ExStyles ඇති forms වල පමණක් ඇත. ExStyles පහත ආකාර වේ.
තවද object එකෙහි class එක අනුව ExStlyes ඇත. ඒවා පහත දක්වා ඇත.
SysListView32
SysTabControl32
RichEdit20A
ComboBoxEx32
මීලග 4 bytes මගින් දක්වා ඇත්තේ Styles වේ. ඒවා පහත ආකාර වේ.
මෙහිදීද object class එක අනුව styles දක්වනු ලැබේ.
BUTTON
අවසන් 4 bits හි අගය,
TEXT BOX
STATIC
අවසන් 4 bits හි අගය,
LIST BOX
SCROLLBAR
අදට ලියල ඉවරයි. මේ කොටසේ තව ලියන්න තියෙනවා. මීලග කොටසින් ඒ ටික ලියනවා.
RT_DIALOG (0x00000005)
මෙහි ඇත්තේ PE එකක අපට දක්නට ඇති dialogs වේ. එනම් අප forms ලෙස හදුන්වන්නේද මේවාය. මෙම dialog එකක් තුල තවත් objects තිබිය හැක. එනම් buttons, check boxes, radio buttons ආදිය වේ. පලමුව dialog එකක structure එක හදුනා ගැනීම සිදු කරමු.
dialog වර්ග 2 ක් තිබේ. එනම් Extended Styles(ExStyles) ඇති හා නැති ඒවා ලෙසය.
මෙහි resource data හි පලමු 8 bytes 0x00000000FFFF0001 ලෙස ඇත්නම් එහි ExStyles ඇත.
මෙහි මීට පසුව ඇති පලමු 4 bytes මගින් ExStyles පෙන්නුම් කරයි. එම styles පහත ආකාරයට දැක්විය හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි ExStyle එක 0x00000000 ලෙස වේ.
STYLE NAME | BIT # |
WS_EX_NOACTIVATE | v=1 |
WS_EX_LAYOUTRTL | x=1 |
WS_EX_NOINHERITLAYOUT | xii=1 |
WS_EX_LAYERED | xiii=1 |
WS_EX_APPWINDOW | xiv=1 |
WS_EX_STATICEDGE | xv=1 |
WS_EX_CONTROLPARENT | xvi=1 |
WS_EX_LEFTSCROLLBAR | xviii=1 |
WS_EX_RTLREADING | xix=1 |
WS_EX_RIGHT | xx=1 |
WS_EX_LEFT WS_EX_LTRREADING WS_EX_RIGHTSCROLLBAR | xviii=0 And xix=0 And xx=0 |
WS_EX_CONTEXTHELP | xxii=1 |
WS_EX_CLIENTEDGE | xxiii=1 |
WS_EX_WINDOWEDGE | xxiv=1 |
WS_EX_TOOLWINDOW | xxv=1 |
WS_EX_MDICHILAD | xxvi=1 |
WS_EX_TRANSPARENT | xxvii=1 |
WS_EX_ACCEPTFILES | xxviii=1 |
WS_EX_TOPMOST | xxix=1 |
WS_EX_NOPARENTNOTIFY | xxx=1 |
WS_EX_DLGMODALFRAME | xxxii=1 |
WS_EX_PALETTEWINDOW | xxiv=1 And xxv=1 And xxix=1 |
WS_EX_OVERLAPPEDWINDOW | xxiii=1 And xxiv=1 |
මෙහි මීලග 4 bytes මගින් Window Styles පෙන්නුම් කෙරේ. එම Styles පහත ආකාරයට පෙන්නුම් කල හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි Style එක 0x80C821CC ලෙස ඇත.
STYLE NAME | BIT # |
WS_POPUP | i=1 And ii=0 |
WS_CHILD | i=0 And ii=1 |
WS_MINIMIZE | iii=1 |
WS_VISIBLE | iv=1 |
WS_DISABLED | v=1 |
WS_CLIPSIBLINGS | vi=1 |
WS_CLIPCHILDREN | vii=1 |
WS_MAXIMIZE | viii=1 |
WS_BORDER | ix=1 And x=0 |
WS_DLGFRAME | ix=1 And x=0 |
WS_CAPTION | ix=1 And x=1 |
WS_VSCROLL | xi=1 |
WS_HSCROLL | xii=1 |
WS_SYSMENU | xiii=1 |
WS_THICKFRAME | xiv=1 |
WS_MINIMIZEBOX | xv=1 |
WS_MAXIMIZEBOX | xvi=1 |
DS_CONTEXTHELP | xix=1 |
DS_CENTERMOUSE | xx=1 |
DS_CENTER | xxi=1 |
DS_CONTROL | xxii=1 |
DS_SETFOREGROUND | xxiii=1 |
DS_NOIDLEMSG | xxiv=1 |
DS_MODALFRAME | xxv=1 |
DS_SETFONT | xxvi=1 |
DS_LOCALEDIT | xxvii=1 |
DS_NOFAILCREATE | xxviii=1 |
DS_FIXEDSYS | xxix=1 |
DS_SYSMDAL | xxxi=1 |
DS_ABSALIGN | xxxii=1 |
WS_POPUPWINDOW | i=1 And ix=1 And x=1 And xiii=1 |
WS_TILEDWINDOW | ix=1 And x=1 And xiii=1 And xiv=1 And xv=1 And xvi=1 |
මීලගට ඇති 2 bytes මගින් මෙම form එකෙහි ඇති objects ගණන දක්වා ඇත. මෙහි 0x0008 ලෙස ඇත. මීලග 2 bytes මගින් form එක පෙන්විය යුතු ස්ථානයේ X ඛන්ඩාංකය දක්වා ඇත. මෙහිදී 0x0000 වේ. මීලග 2 bytes මගින් Y ඛන්ඩාංකය දක්වා ඇත. මෙහිදී 0x0000 වේ. මීලග 2 bytes මගින් form එකෙහි width එකද ඊලග 2 bytes මගින් form එකෙහි height එකද දක්වා ඇත. මෙහිදී ඒවා 0x00E3 හා 0x005F ලෙස වේ. මීලග 2 bytes මගින් form එකට Main menu එකක් තිබේද යන වග පෙන්වයි. මෙහි අගය 0x0000 හෝ 0xFFFF නොවේ නම්, එහි ඇති අගය menu එකෙහි ID එක වේ. 0xFFFF ලෙස ඇත්නම් ඊලග 2 bytes මගින් menu ID එක පෙන්නුම් කරයි. මීලගට menu ID එක දැක්වූ ආකාරයටම class ID එක දක්වා ඇත. මෙහිදී බොහෝ විට 0x0000 ලෙස ඇත. මීලගට ඇත්තේ form එකෙහි caption එක වේ. මීලග 2 bytes මගින් form එකෙහි font size එක දක්වා ඇත. මීලග 2 bytes මගින් font weight එක දක්වා ඇත. මීලග 2 bytes මගින් italic ද යන වග දක්වා ඇත. එය 0x0001 ලෙස ඇත්නම් italic ද 0x0000 ලෙස ඇත්නම් italic නොවන බවද පෙන්නුම් කරයි. මීලගට ඇත්තේ font name එක වේ. මෙහි weight හා italic යන්න ඇත්තේ ExStyles ඇති forms වල පමණක් වේ.
මීලගට ඇත්තේ form එකෙහි objects පිළිබද විස්තර වේ. ඒවා array එකක් ලෙස ඇත. පළමුව object classes හදුනා ගනිමු.
ප්රධාන වශයෙන් classes වර්ග 6 ක් ඇත. එම classes හා ඒවාට අයත් objects පහත දක්වා ඇත.
මෙම සෑම object එකකම data ආරම්භ වනුයේ file offset එක 4 හි ගුණාකාරයක් වන ස්ථානයකිනි. එනම් මෙහි alignment එක 4 වේ. එක් object එකක් ගත් විට,
මෙහි පළමු 4 bytes මගින් ExStyles පෙන්නුම් කරයි. මෙය ExStyles ඇති forms වල පමණක් ඇත. ExStyles පහත ආකාර වේ.
STYLE NAME | BIT # |
WS_EX_DLGMODALFRAME | xxxii=1 |
WS_EX_CLIENTEDGE | xxiii=1 |
WS_EX_STATICEDGE | v=1 |
තවද object එකෙහි class එක අනුව ExStlyes ඇත. ඒවා පහත දක්වා ඇත.
SysListView32
STYLE NAME | BIT # |
LVS_EX_GRIDLINES | xxxii=1 |
LVS_EX_SUBITEMIMAGES | xxxi=1 |
LVS_EX_CHECKBOXES | xxx=1 |
LVS_EX_TRACKSELECT | xxix=1 |
LVS_EX_HEADERRAGDROP | xxviii=1 |
LVS_EX_FULLROWSELECT | xxvii=1 |
LVS_EX_ONECLICKACTIVATE | xxvi=1 |
LVS_EX_TWOCLICKACTIVATE | xxv=1 |
SysTabControl32
STYLE NAME | BIT # |
TCS_EX_FLATSEPARATORS | xxxii=1 |
TCS_EX_REGISTERDROP | xxxi=1 |
RichEdit20A
STYLE NAME | BIT # |
ES_EX_NOCALLOLEINIT | xxxii=1 |
ComboBoxEx32
STYLE NAME | BIT # |
CBES_EX_NOEDITIMAGE | xxxii=1 |
CBES_EX_NOEDITIMAGEINDENT | xxxi=1 |
CBES_EX_PATHWORDBREAKPRO | xxx=1 |
CBES_EX_NOSIZELIMIT | xxix=1 |
CBES_EX_CASESENSITIVE | xxviii=1 |
මීලග 4 bytes මගින් දක්වා ඇත්තේ Styles වේ. ඒවා පහත ආකාර වේ.
STYLE NAME | BIT # |
WS_TABSTOP | xvi=1 |
WS_GROUP | xv=1 |
WS_HSCROLL | xii=1 |
WS_VSCROLL | xi=1 |
WS_BORDER | ix=1 |
WS_CLIPSBLINGS | vi=1 |
WS_DISABLED | v=1 |
WS_VISIBLE | iv=1 |
WS_CHILD | ii=1 |
මෙහිදීද object class එක අනුව styles දක්වනු ලැබේ.
BUTTON
අවසන් 4 bits හි අගය,
BS_PUSHBUTTON | 0 |
BS_DEEPUSHBUTTON | 1 |
BS_CHECKBOX | 2 |
BS_AUTOCHECKBOX | 3 |
BS_RADIOBUTTON | 4 |
BS_3STATE | 5 |
BS_AUTO3STATE | 6 |
BS_GROUPBOX | 7 |
BS_USERBUTTON | 8 |
BS_AUTORADIOBUTTON | 9 |
BS_OWNERDRAW | 11 |
STYLE NAME | BIT # |
BS_LEFTTEXT | xxvii=1 |
BS_ICON | xxvi=1 |
BS_BITMAP | xxv=1 |
BS_LEFT | xxiv=1 And xxiii=0 |
BS_RIGHT | xxiv=0 And xxiii=1 |
BS_CENTER | xxiv=1 And xxiii=1 |
BS_TOP | xxiv=1 And xxiii=0 |
BS_BOTTOM | xxii=0 And xxi=1 |
BS_VCENTER | xxii=1 And xxi=1 |
BS_PUSHLIKE | xx=1 |
BS_MULTILINE | xix=1 |
BS_NTIFY | xviii=1 |
BS_FLAT | xvii=1 |
TEXT BOX
STYLE NAME | BIT # |
ES_LEFT | xxxii=0 And xxxi=0 |
ES_CENTER | xxxii=1 And xxxi=0 |
ES_RIGHT | xxxii=1 And xxxi=1 |
ES_MULTILINE | xxx=1 |
ES_UPPERCASE | xxix=1 |
ES_LOWERCASE | xxviii=1 |
ES_PASSWORD | xxvii=1 |
ES_AUTOVSCROLL | xxvi=1 |
ES_AUTOHSCROLL | xxv=1 |
ES_NOHIDESEL | xxiv=1 |
ES_OEMCONVERT | xxiii=1 |
ES_READONLY | xxii=1 |
ES_WANTRETURN | xxi=1 |
ES_NUMBER | xx=1 |
STATIC
අවසන් 4 bits හි අගය,
SS_LEFT | 0 |
SS_CENTER | 1 |
SS_RIGHT | 2 |
SS_ICON | 3 |
SS_BLACKRECT | 4 |
SS_GRAYRECT | 5 |
SS_WHITERECT | 6 |
SS_BLACKFRAME | 7 |
SS_GRAYFRAME | 8 |
SS_WHITEFRAME | 9 |
SS_USERITEM | 10 |
SS_SIMPLE | 11 |
SS_LEFTNOWORDWRAP | 12 |
SS_OWNERDRAW | 13 |
SS_BITMAP | 14 |
SS_ENHMETAFILE | 15 |
STYLE NAME | BIT # |
SS_NOPREFIX | xxv=1 |
SS_REALSIZEIMAGE | xxi=1 |
SS_RIGHTIMAGE | xxii=1 |
SS_CENTERIMAGE | xxiii=1 |
SS_NOTIFY | xxiv=1 |
SS_WORDELLIPSIS | xvii=1 And xviii=1 |
SS_PATHELLIPSIS | xvii=1 And xviii=1 |
SS_ENDELLIPSIS | xvii=0 And xviii=1 |
SS_SUNKEN | xx=1 |
LIST BOX
STYLE NAME | BIT # |
LBS_NODATA | xix=1 |
LBS_DISABLENOSCROLL | xx=1 |
LBS_EXTENDEDSEL | xxi=1 |
LBS_WANTKEYBOARDINPUT | xxii=1 |
LBS_MULTICOLUMN | xxiii=1 |
LBS_NOINTEGRALHEIGHT | xxiv=1 |
LBS_USETABSTOPS | xxv=1 |
LBS_HASSTRINGS | xxvi=1 |
LBS_OWNERDRAWVARIABLE | xxvii=1 |
LBS_OWNERDRAWFIXED | xxviii=1 |
LBS_MULTIPLESEL | xxix=1 |
LBS_NOREDRAW | xxx=1 |
LBS_SORT | xxxi=1 |
LBS_NOTIFY | xxxii=1 |
SCROLLBAR
STYLE NAME | BIT # |
SBS_SIZEGRIP | xxviii=1 |
SBS_SIZEBOX | xxix=1 |
SBS_BOTTOMALIGN | xxx=1 |
SBS_RIGHTALIGN SBS_SIZEBOXBOTTOMRIGHTALIGN SBS_TOPALIGN SBS_LEFTALIGN SBS_SIZEBOXTOPLEFTALIGN | xxxi=1 |
SBS_HORZ | xxxii=0 |
SBS_VERT | xxxii=1 |
අදට ලියල ඉවරයි. මේ කොටසේ තව ලියන්න තියෙනවා. මීලග කොටසින් ඒ ටික ලියනවා.
Subscribe to:
Posts (Atom)