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 ලෙස වේ.


STYLE NAME
BIT #
WS_EX_NOACTIVATEv=1
WS_EX_LAYOUTRTLx=1
WS_EX_NOINHERITLAYOUTxii=1
WS_EX_LAYEREDxiii=1
WS_EX_APPWINDOWxiv=1
WS_EX_STATICEDGExv=1
WS_EX_CONTROLPARENTxvi=1
WS_EX_LEFTSCROLLBARxviii=1
WS_EX_RTLREADINGxix=1
WS_EX_RIGHTxx=1
WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
xviii=0 And xix=0 And xx=0
WS_EX_CONTEXTHELPxxii=1
WS_EX_CLIENTEDGExxiii=1
WS_EX_WINDOWEDGExxiv=1
WS_EX_TOOLWINDOWxxv=1
WS_EX_MDICHILADxxvi=1
WS_EX_TRANSPARENTxxvii=1
WS_EX_ACCEPTFILESxxviii=1
WS_EX_TOPMOSTxxix=1
WS_EX_NOPARENTNOTIFYxxx=1
WS_EX_DLGMODALFRAMExxxii=1
WS_EX_PALETTEWINDOWxxiv=1 And
xxv=1 And
xxix=1
WS_EX_OVERLAPPEDWINDOWxxiii=1 And
xxiv=1


මෙහි මීලග 4 bytes මගින් Window Styles පෙන්නුම් කෙරේ. එම Styles පහත ආකාරයට පෙන්නුම් කල හැක.
උදා:- Shell32.dll හි 1003 යන dialog එකෙහි Style එක 0x80C821CC ලෙස ඇත.


STYLE NAMEBIT #
WS_POPUPi=1 And
ii=0
WS_CHILDi=0 And
ii=1
WS_MINIMIZEiii=1
WS_VISIBLEiv=1
WS_DISABLEDv=1
WS_CLIPSIBLINGSvi=1
WS_CLIPCHILDRENvii=1
WS_MAXIMIZEviii=1
WS_BORDERix=1 And
x=0
WS_DLGFRAMEix=1 And
x=0
WS_CAPTIONix=1 And
x=1
WS_VSCROLLxi=1
WS_HSCROLLxii=1
WS_SYSMENUxiii=1
WS_THICKFRAMExiv=1
WS_MINIMIZEBOXxv=1
WS_MAXIMIZEBOXxvi=1
DS_CONTEXTHELPxix=1
DS_CENTERMOUSExx=1
DS_CENTERxxi=1
DS_CONTROLxxii=1
DS_SETFOREGROUNDxxiii=1
DS_NOIDLEMSGxxiv=1
DS_MODALFRAMExxv=1
DS_SETFONTxxvi=1
DS_LOCALEDITxxvii=1
DS_NOFAILCREATExxviii=1
DS_FIXEDSYSxxix=1
DS_SYSMDALxxxi=1
DS_ABSALIGNxxxii=1
WS_POPUPWINDOWi=1 And
ix=1 And
x=1 And
xiii=1
WS_TILEDWINDOWix=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 NAMEBIT #
WS_EX_DLGMODALFRAMExxxii=1
WS_EX_CLIENTEDGExxiii=1
WS_EX_STATICEDGEv=1

තවද object එකෙහි class එක අනුව ExStlyes ඇත. ඒවා පහත දක්වා ඇත.

SysListView32
STYLE NAMEBIT #
LVS_EX_GRIDLINESxxxii=1
LVS_EX_SUBITEMIMAGESxxxi=1
LVS_EX_CHECKBOXESxxx=1
LVS_EX_TRACKSELECTxxix=1
LVS_EX_HEADERRAGDROPxxviii=1
LVS_EX_FULLROWSELECTxxvii=1
LVS_EX_ONECLICKACTIVATExxvi=1
LVS_EX_TWOCLICKACTIVATExxv=1

SysTabControl32
STYLE NAMEBIT #
TCS_EX_FLATSEPARATORSxxxii=1
TCS_EX_REGISTERDROPxxxi=1

RichEdit20A
STYLE NAMEBIT #
ES_EX_NOCALLOLEINITxxxii=1

ComboBoxEx32
STYLE NAMEBIT #
CBES_EX_NOEDITIMAGExxxii=1
CBES_EX_NOEDITIMAGEINDENTxxxi=1
CBES_EX_PATHWORDBREAKPROxxx=1
CBES_EX_NOSIZELIMITxxix=1
CBES_EX_CASESENSITIVExxviii=1

මීලග 4 bytes මගින් දක්වා ඇත්තේ Styles වේ. ඒවා පහත ආකාර වේ.

STYLE NAMEBIT #
WS_TABSTOPxvi=1
WS_GROUPxv=1
WS_HSCROLLxii=1
WS_VSCROLLxi=1
WS_BORDERix=1
WS_CLIPSBLINGSvi=1
WS_DISABLEDv=1
WS_VISIBLEiv=1
WS_CHILDii=1

මෙහිදීද object class එක අනුව styles දක්වනු ලැබේ.

BUTTON
අවසන් 4 bits හි අගය,
BS_PUSHBUTTON0
BS_DEEPUSHBUTTON1
BS_CHECKBOX2
BS_AUTOCHECKBOX3
BS_RADIOBUTTON4
BS_3STATE5
BS_AUTO3STATE6
BS_GROUPBOX7
BS_USERBUTTON8
BS_AUTORADIOBUTTON9
BS_OWNERDRAW11

STYLE NAMEBIT #
BS_LEFTTEXTxxvii=1
BS_ICONxxvi=1
BS_BITMAPxxv=1
BS_LEFTxxiv=1 And
xxiii=0
BS_RIGHTxxiv=0 And
xxiii=1
BS_CENTERxxiv=1 And
xxiii=1
BS_TOPxxiv=1 And
xxiii=0
BS_BOTTOMxxii=0 And
xxi=1
BS_VCENTERxxii=1 And
xxi=1
BS_PUSHLIKExx=1
BS_MULTILINExix=1
BS_NTIFYxviii=1
BS_FLATxvii=1

TEXT BOX
STYLE NAMEBIT #
ES_LEFTxxxii=0 And
xxxi=0
ES_CENTERxxxii=1 And
xxxi=0
ES_RIGHTxxxii=1 And
xxxi=1
ES_MULTILINExxx=1
ES_UPPERCASExxix=1
ES_LOWERCASExxviii=1
ES_PASSWORDxxvii=1
ES_AUTOVSCROLLxxvi=1
ES_AUTOHSCROLLxxv=1
ES_NOHIDESELxxiv=1
ES_OEMCONVERTxxiii=1
ES_READONLYxxii=1
ES_WANTRETURNxxi=1
ES_NUMBERxx=1

STATIC
අවසන් 4 bits හි අගය,
SS_LEFT0
SS_CENTER1
SS_RIGHT2
SS_ICON3
SS_BLACKRECT4
SS_GRAYRECT5
SS_WHITERECT6
SS_BLACKFRAME7
SS_GRAYFRAME8
SS_WHITEFRAME9
SS_USERITEM10
SS_SIMPLE11
SS_LEFTNOWORDWRAP12
SS_OWNERDRAW13
SS_BITMAP14
SS_ENHMETAFILE15

STYLE NAMEBIT #
SS_NOPREFIXxxv=1
SS_REALSIZEIMAGExxi=1
SS_RIGHTIMAGExxii=1
SS_CENTERIMAGExxiii=1
SS_NOTIFYxxiv=1
SS_WORDELLIPSISxvii=1 And
xviii=1
SS_PATHELLIPSISxvii=1 And
xviii=1
SS_ENDELLIPSISxvii=0 And
xviii=1
SS_SUNKENxx=1

LIST BOX
STYLE NAMEBIT #
LBS_NODATAxix=1
LBS_DISABLENOSCROLLxx=1
LBS_EXTENDEDSELxxi=1
LBS_WANTKEYBOARDINPUTxxii=1
LBS_MULTICOLUMNxxiii=1
LBS_NOINTEGRALHEIGHTxxiv=1
LBS_USETABSTOPSxxv=1
LBS_HASSTRINGSxxvi=1
LBS_OWNERDRAWVARIABLExxvii=1
LBS_OWNERDRAWFIXEDxxviii=1
LBS_MULTIPLESELxxix=1
LBS_NOREDRAWxxx=1
LBS_SORTxxxi=1
LBS_NOTIFYxxxii=1

SCROLLBAR
STYLE NAMEBIT #
SBS_SIZEGRIPxxviii=1
SBS_SIZEBOXxxix=1
SBS_BOTTOMALIGNxxx=1
SBS_RIGHTALIGN
SBS_SIZEBOXBOTTOMRIGHTALIGN
SBS_TOPALIGN
SBS_LEFTALIGN
SBS_SIZEBOXTOPLEFTALIGN
xxxi=1
SBS_HORZxxxii=0
SBS_VERTxxxii=1

අදට ලියල ඉවරයි. මේ කොටසේ තව ලියන්න තියෙනවා. මීලග කොටසින් ඒ ටික ලියනවා.