Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Path: blob/master/external/source/shellcode/windows/templates/inc/pe.inc
Views: 11788
;corriger ;??? ;raison inconnue ; ? ;gestion message d'erreur structures (%error) ; %define et %ifdef pour tester l'existence de header n�cessaires ; (pour �viter les erreurs de label ind�finis) ;.edata,.rsrc (icones) ;supprimer macro Directories ? (calcul automatique ?) ; MACROS AND DEFINITIONS FOR PE FILES v1.0a ; ========================================= ;By rix-shogun-agressor ([email protected],[email protected]) ;conventions: ;xxx_VA: adresse virtuelle (adresse en m�moire) ;xxx_RVA: d�placement d'adresse virtuel (offset d'adresse en m�moire%baseVA) ;xxx_VS: taille virtuelle (taille en m�moire) ;xxx_FS: taille fichier ;xxx_FA: adresse fichier (offset dans le fichier) ;xxx_Fa: file alignement ;xxx-Va: virtual alignement (alignement m�moire) ;xxx_Assign: assignation pour un calcul �valu� plus tard ;xxx_Define: definition pour un calcul �valu� plus tard dont une des valeurs ; est toujours inconnue ;xxx_Ifctx: macros pour regrouper plusieurs %ifctx ;xxx: valeur ;sections: text, ;macros de d�finitions des header: NOM[SousNom]_Begin NOM[SousNom]_End ; ou bien: NOM[SousNom] ;define de d�finitions des headers: NOM[SousNom]_Xxx ;definition de constantes des header: NOM[SousNom]_XXX ;nom interne aux macros NOMHeader NOM[SousNom]_Begin_FA NOM[SousNom]_End_FA ;MacroXXX:macros internes ;xxxx:normal ;xxxxa:align� (V=>align� virtuel,F=>align� fichier) ;equ: valeur calcul�e d'apr�s nombres suivants l'endroit de stockage ;%define: d�claration des constantes utilisables par l'utilisateur ;%assign: d�claration des variables internes pour les calculs d'equ (_Assign) ;================================= BIN Begin ================================= %ifndef PE.INC %define PE.INC %push PE.INC %include "language.inc" %macro BIN_Begin 0 SECTION .text BIN_Begin_FA: %push BIN_Begin %endmacro ;================================= MZ Header ================================= %define MZHeader_MinimumMemory 0 ;en paragraphes, � ajouter en fin de m�moire %define MZHeader_MaximumMemory 0FFFFh ;en paragraphes, � ajouter en fin de m�moire %define MZHeader_Ss 0000h %define MZHeader_Sp 00B8h ; ? %define MZHeader_Ip 0000h %define MZHeader_Cs 0000h %macro MZHeader 0 %ifctx BIN_Begin BITS 16 MZHeader_Begin_FA: MZHeader_Signature_FA: db 'MZ' MZHeader_LastPageBytes_FA: dw (BIN_End_FAa-BIN_Begin_FA) % 512 MZHeader_PagesNumber_FA: dw (BIN_End_FAa-BIN_Begin_FA)/512+1 MZHeader_RelocationsNumber_FA: dw 0 MZHeader_HeaderParagraphsNumber_FA: dw (MZExtendedHeader_End_FA-MZHeader_Begin_FA)/16 MZHeader_MinimumMemory_FA: dw MZHeader_MinimumMemory MZHeader_MaximumMemory_FA: dw MZHeader_MaximumMemory MZHeader_Ss_FA: dw MZHeader_Ss MZHeader_Sp_FA: dw MZHeader_Sp MZHeader_Checksum_FA: dw 0 MZHeader_Ip_FA: dw MZHeader_Ip MZHeader_Cs_FA: dw MZHeader_Cs MZHeader_RelocationTableFA_FA: dw 0040h ;0040h=>fichier PE MZHeader_OverlayNumber_FA: dw 0 MZHeader_End_FA: %repl MZHeader %else %error PE.INC error: MZHeader => BIN_Begin %endif %endmacro ;============================ MZ Extended Header ============================= %macro MZExtendedHeader 0 %ifctx MZHeader MZExtendedHeader_Begin_FA: dd 0 dw 0 %rep 26 db 0 %endrep MZExtendedHeader_PEHeaderFA_FA: dd PEHeader_Begin_FA MZExtendedHeader_End_FA: %repl MZExtendedHeader %else %error PE.INC error: MZExtendedHeader => MZHeader %endif %endmacro ;================================== MZ Text ================================== %macro MZSection.text_Begin 0 %ifctx MZExtendedHeader MZSection.text_Begin_FA: %define MZSection.text_VA(a) (a)-MZSection.text_Begin_FA %repl MZSection.text_Begin %else %error PE.INC error: MZSection.text_Begin => MZExtendedHeader %endif %endmacro %macro MZSection.text_End 0 %ifctx MZSection.text_Begin MZSection.text_End_FA: DbAlign MZSection.text_Begin_FA,16 MZSection.text_End_FAa: %repl MZSection.text_End %else %error PE.INC error: MZSection.text_End => MZSection.text_Begin %endif %endmacro ;================================= PE Header ================================= %define PEHeader_Machine_386 14Ch %define PEHeader_Machine_486 14Dh %define PEHeader_Machine_PENTIUM 14Eh %define PEHeader_Machine PEHeader_Machine_386 %define PEHeader_DateHour 0 %define PEHeader_OptionalHeaderFS 0E0h ; ? %define PEHeader_Characteristics_NORELOCATIONS 0000000000000001b %define PEHeader_Characteristics_EXECUTABLEIMAGE 0000000000000010b ;ex�cutable/librairie %define PEHeader_Characteristics_16B 0000000001000000b ;programme 16 bits %define PEHeader_Characteristics_BYTESREVERSEDLOW 0000000010000000b %define PEHeader_Characteristics_32B 0000000100000000b ;programme 32 bits %define PEHeader_Characteristics_NODEBUGINFORMATIONS 0000001000000000b %define PEHeader_Characteristics_SYSTEMFILE 0001000000000000b %define PEHeader_Characteristics_DLL 0010000000000000b %define PEHeader_Characteristics_BYTESREVERSEDHIGH 1000000000000000b %define PEHeader_Characteristics PEHeader_Characteristics_NORELOCATIONS | PEHeader_Characteristics_EXECUTABLEIMAGE | PEHeader_Characteristics_32B %macro PEHeader 0 %ifctx MZSection.text_End BITS 32 PEHeader_Begin_FA: PEHeader_Signature_FA: db 'PE',00h,00h PEHeader_Machine_FA: dw PEHeader_Machine PEHeader_SectionsNumber_FA: dw PEHeader_SectionsNumber %assign PEHeader_SectionsNumber_Assign 0 PEHeader_DateHour_FA: dd PEHeader_DateHour dd 0 dd 0 PEHeader_OptionalHeaderFS_FA: dw PEHeader_OptionalHeaderFS PEHeader_Characteristics_FA: dw PEHeader_Characteristics PEHeader_End_FA: %define PESection_RVA(a) PESectionCur_RVAa_Assign+(a)-PESectionCur_FAa_Define %define PESection.text_RVA(a) PESection.text_RVAa+(a)-PESection.text_Begin_FAa %define PESection.rdata_RVA(a) PESection.rdata_RVAa+(a)-PESection.rdata_Begin_FAa %define PESection.data_RVA(a) PESection.data_RVAa+(a)-PESection.data_Begin_FAa %define PESection.bss_RVA(a) PESection.bss_RVAa+(a)-PESection.bss_Begin_FAa %define PESection.idata_RVA(a) PESection.idata_RVAa+(a)-PESection.idata_Begin_FAa %repl PEHeader %else %error PE.INC error: PEHeader => MZSection.text_End %endif %endmacro ;============================ PE Optional Header ============================= %define PEOptionalHeader_MajorLinkerVersion 0 %define PEOptionalHeader_MinorLinkerVersion 0 %define PEOptionalheader_EipRVA PESection.text_RVA(PESection.text_Begin_FAa) %define PEOptionalHeader_ImageVAa 00400000h %define PEOptionalHeader_Va 1000h %define PEOptionalHeader_Fa 200h %define PEOptionalHeader_MajorOSVersion 4 %define PEOptionalHeader_MinorOSVersion 0 %define PEOptionalHeader_MajorProgramVersion 0 %define PEOptionalHeader_MinorProgramVersion 0 %define PEOptionalHeader_MajorSubSystemVersion 4 %define PEOptionalHeader_MinorSubSystemVersion 0 %define PEOptionalHeader_SubSystem_DRIVER 1 %define PEOptionalHeader_SubSystem_GUI 2 %define PEOptionalHeader_SubSystem_CONSOLE 3 %define PEOptionalHeader_SubSystem_POSIX 7 %define PEOptionalHeader_SubSystem PEOptionalHeader_SubSystem_GUI %define PEOptionalHeader_DllFlags_NOTIFYPROCESSATTACHMENTS 0001b %define PEOptionalHeader_DllFlags_NOTIFYPROCESSDETACHMENTS 0010b %define PEOptionalHeader_DllFlags_NOTIFYTHREADSATTACHMENTS 0100b %define PEOptionalHeader_DllFlags_NOTIFYTHREADSDETACHMENTS 1000b %define PEOptionalHeader_DllFlags 0 %define PEOptionalHeader_ReservedStackVSa 0 %define PEOptionalHeader_CommittedStackVSa 0 %define PEOptionalHeader_ReservedHeapVSa 0 %define PEOptionalHeader_CommittedHeapVSa 0 %macro PEOptionalHeader_Begin 0 %ifctx PEHeader PEOptionalHeader_Begin_FA: PEOptionalHeader_Signature_FA: db 0Bh,01h PEOptionalHeader_MajorLinkerVersion_FA: db PEOptionalHeader_MajorLinkerVersion PEOptionalHeader_MinorLinkerVersion_FA: db PEOptionalHeader_MinorLinkerVersion PEOptionalHeader_CodeFSa_FA: dd PESection.text_FSa PEOptionalHeader_InitializedDataFSa_FA: dd PEOptionalHeader_InitializedDataFSa %assign PEOptionalHeader_InitializedDataFSa_Assign 0 PEOptionalHeader_UninitializedDataVSa_FA: dd PESection.bss_VSa PEOptionalHeader_EipRVA_FA: dd PEOptionalheader_EipRVA PEOptionalHeader_CodeRVAa_FA: dd PESection.text_RVAa %assign PEOptionalHeader_DataRVAa_Assign 0 PEOptionalHeader_DataRVAa_FA: dd PEOptionalHeader_DataRVAa ; ? PEOptionalHeader_ImageVAa_FA: dd PEOptionalHeader_ImageVAa PEOptionalHeader_Va_FA: dd PEOptionalHeader_Va PEOptionalHeader_Fa_FA: dd PEOptionalHeader_Fa PEOptionalHeader_MajorOSVersion_FA: dw PEOptionalHeader_MajorOSVersion PEOptionalHeader_MinorOSVersion_FA: dw PEOptionalHeader_MinorOSVersion PEOptionalHeader_MajorProgramVersion_FA: dw PEOptionalHeader_MajorProgramVersion PEOptionalHeader_MinorProgramVersion_FA: dw PEOptionalHeader_MinorProgramVersion PEOptionalHeader_MajorSubSystemVersion_FA: dw PEOptionalHeader_MajorSubSystemVersion PEOptionalHeader_MinorSubSystemVersion_FA: dw PEOptionalHeader_MinorSubSystemVersion dd 0 PEOptionalHeader_ImageVSa_FA: dd PEOptionalHeader_ImageVSa PEOptionalHeader_HeadersFSa_FA: dd PESections_Begin_FAa-BIN_Begin_FA PEOptionalHeader_Checksum_FA: dd 0 PEOptionalHeader_SubSystem_FA: dw PEOptionalHeader_SubSystem PEOptionalHeader_DllFlags_FA: dw PEOptionalHeader_DllFlags PEOptionalHeader_ReservedStackVSa_FA: dd PEOptionalHeader_ReservedStackVSa ;??? PEOptionalHeader_CommittedStackVSa_FA: dd PEOptionalHeader_CommittedStackVSa ;??? PEOptionalHeader_ReservedHeapVSa_FA: dd PEOptionalHeader_ReservedHeapVSa ;??? PEOptionalHeader_CommittedHeapVSa_FA: dd PEOptionalHeader_CommittedHeapVSa ;??? dd 0 PEOptionalHeader_DirectoriesNumber_FA: dd PEOptionalHeader_DirectoriesNumber %assign PEOptionalHeader_DirectoriesNumber_Assign 0 %repl PEOptionalHeader_Begin %else %error PE.INC error: PEOptionalHeader_Begin => PEHeader %endif %endmacro ;PEOptionalHeader_Directory name,RVA,FS %macro PEOptionalHeader_Directory 3 %ifctx PEOptionalHeader_Begin PEOptionalHeader%1RVA_FA: dd %2 PEOptionalHeader%1FS_FA: dd %3 %assign PEOptionalHeader_DirectoriesNumber_Assign PEOptionalHeader_DirectoriesNumber_Assign+1 %else %error PE.INC error: PEOptionalHeader_Directory => PEOptionalHeader_Begin %endif %endmacro %macro PEOptionalHeader_End 0 %ifctx PEOptionalHeader_Begin PEOptionalHeader_End_FA: DbAlign PEOptionalHeader_Begin_FA,PEHeader_OptionalHeaderFS PEOptionalHeader_End_FAa: PEOptionalHeader_DirectoriesNumber equ PEOptionalHeader_DirectoriesNumber_Assign %repl PEOptionalHeader_End %else %error PE.INC error: PEOptionalHeader_End => PEOptionalHeader_Begin %endif %endmacro ;============================= PE Section Header ============================= %define PESectionHeader_Flags_EXECUTABLECODE 00000000000000000000000000100000b %define PESectionHeader_Flags_DATAFROMFILE 00000000000000000000000001000000b %define PESectionHeader_Flags_DATA0 00000000000000000000000010000000b %define PESectionHeader_Flags_COMMENTS 00000000000000000000001000000000b %define PESectionHeader_Flags_COMMONBLOCKDATA 00000000000000000001000000000000b %define PESectionHeader_Flags_FARDATA 00000000000000001000000000000000b %define PESectionHeader_Flags_PURGEABLEDATA 00000000000000100000000000000000b %define PESectionHeader_Flags_NONMOVABLEDATA 00000000000001000000000000000000b %define PESectionHeader_Flags_SHAREDINSTANCES 00010000000000000000000000000000b ;.text %define PESectionHeader_Flags_EXECUTEACCESS 00100000000000000000000000000000b %define PESectionHeader_Flags_READACCESS 01000000000000000000000000000000b %define PESectionHeader_Flags_WRITEACCESS 10000000000000000000000000000000b ;PESectionHeader .name,'.name',flags %macro PESectionHeader 3 %ifctx PEOptionalHeader_End PESectionHeader%1_Name_FA: db %2 DbAlign PESectionHeader%1_Name_FA,8 PESectionHeader%1_VS_FA: dd PESection%1_VS PESectionHeader%1_RVAa_FA: dd PESection%1_RVAa PESectionHeader%1_FSa_FA: dd PESection%1_FSa PESectionHeader%1_FAa_FA: dd PESectionHeader%1_FAa dd 0 dd 0 dw 0 dw 0 PESectionHeader%1_Flags_FA: dd %3 %else %error PE.INC error: PESectionHeader => PEOptionalHeader_End %endif %endmacro ;================================ PE Sections ================================ %macro PESections_Begin 0 %ifctx PEOptionalHeader_End PESections_Begin_FA: DbAlign BIN_Begin_FA,PEOptionalHeader_Fa PESections_Begin_FAa: %assign PESectionPrec_FSa_Assign PESections_Begin_FAa-BIN_Begin_FA %assign PESectionPrec_RVAa_Assign 0 %assign PESectionCur_RVAa_Assign 0 %define PESectionCur_FAa_Define 0 ;impossible dans MacroPESection_Begin %define PESection_VA(a) PEOptionalHeader_ImageVAa+PESectionCur_RVAa_Assign+(a)-PESectionCur_FAa_Define %define PESection.text_VA(a) PEOptionalHeader_ImageVAa+PESection.text_RVAa+(a)-PESection.text_Begin_FAa %define PESection.rdata_VA(a) PEOptionalHeader_ImageVAa+PESection.rdata_RVAa+(a)-PESection.rdata_Begin_FAa %define PESection.data_VA(a) PEOptionalHeader_ImageVAa+PESection.data_RVAa+(a)-PESection.data_Begin_FAa %define PESection.bss_VA(a) PEOptionalHeader_ImageVAa+PESection.bss_RVAa+(a)-PESection.bss_Begin_FAa %define PESection.idata_VA(a) PEOptionalHeader_ImageVAa+PESection.idata_RVAa+(a)-PESection.idata_Begin_FAa %repl PESections_Begin %else %error PE.INC error: PESections_Begin => PEOptionalHeader %endif %endmacro ;MacroPESection_End .name %macro MacroPESection_End 1 PESection%1_End_FA: DbAlign BIN_Begin_FA,PEOptionalHeader_Fa PESection%1_End_FAa: %assign PEHeader_SectionsNumber_Assign PEHeader_SectionsNumber_Assign+1 PESection%1_VS equ PESection%1_End_FA-PESection%1_Begin_FAa %endmacro %macro PESection.text_Begin 0 %ifctx PESections_Begin %assign PESectionCur_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign-1)/PEOptionalHeader_Va)+1)*PEOptionalHeader_Va PESection.text_Begin_FAa: %define PESectionCur_FAa_Define PESection.text_Begin_FAa %push PESection.text_Begin %else %error PE.INC error: PESection.text_Begin => PESections_Begin %endif %endmacro %macro PESection.text_End 0 %ifctx PESection.text_Begin MacroPESection_End .text %assign PESectionPrec_RVAa_Assign PESectionCur_RVAa_Assign PESection.text_RVAa equ PESectionPrec_RVAa_Assign PESection.text_FSa equ PESection.text_End_FAa-PESection.text_Begin_FAa %assign PESectionPrec_FSa_Assign PESection.text_FSa PESectionHeader.text_FAa equ PESection.text_Begin_FAa %pop %else %error PE.INC error: PESection.text_End => PESection.text_Begin %endif %endmacro %macro PESection.rdata_Begin 0 %ifctx PESections_Begin %assign PESectionCur_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign-1)/PEOptionalHeader_Va)+1)*PEOptionalHeader_Va PESection.rdata_Begin_FAa: %define PESectionCur_FAa_Define PESection.rdata_Begin_FAa %push PESection.rdata_Begin %else %error PE.INC error: PESection.rdata_Begin => PESections_Begin %endif %endmacro %macro PESection.rdata_End 0 %ifctx PESection.rdata_Begin MacroPESection_End .rdata %assign PESectionPrec_RVAa_Assign PESectionCur_RVAa_Assign PESection.rdata_RVAa equ PESectionPrec_RVAa_Assign PESection.rdata_FSa equ PESection.rdata_End_FAa-PESection.rdata_Begin_FAa %assign PESectionPrec_FSa_Assign PESection.rdata_FSa PESectionHeader.rdata_FAa equ PESection.rdata_Begin_FAa %assign PEOptionalHeader_InitializedDataFSa_Assign PEOptionalHeader_InitializedDataFSa_Assign+PESection.rdata_FSa %if PEOptionalHeader_DataRVAa_Assign == 0 %assign PEOptionalHeader_DataRVAa_Assign PESection.rdata_RVAa %endif %pop %else %error PE.INC error: PESection.rdata_End => PESection.rdata_Begin %endif %endmacro %macro PESection.data_Begin 0 %ifctx PESections_Begin %assign PESectionCur_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign-1)/PEOptionalHeader_Va)+1)*PEOptionalHeader_Va PESection.data_Begin_FAa: %define PESectionCur_FAa_Define PESection.data_Begin_FAa %push PESection.data_Begin %else %error PE.INC error: PESection.data_Begin => PESections_Begin %endif %endmacro %macro PESection.data_End 0 %ifctx PESection.data_Begin MacroPESection_End .data %assign PESectionPrec_RVAa_Assign PESectionCur_RVAa_Assign PESection.data_RVAa equ PESectionPrec_RVAa_Assign PESection.data_FSa equ PESection.data_End_FAa-PESection.data_Begin_FAa PESectionHeader.data_FAa equ PESection.data_Begin_FAa %assign PESectionPrec_FSa_Assign PESection.data_FSa %assign PEOptionalHeader_InitializedDataFSa_Assign PEOptionalHeader_InitializedDataFSa_Assign+PESection.data_FSa %if PEOptionalHeader_DataRVAa_Assign == 0 %assign PEOptionalHeader_DataRVAa_Assign PESection.data_RVAa %endif %pop %else %error PE.INC error: PESection.data_End => PESection.data_Begin %endif %endmacro %macro PESection.bss_Begin 0 %ifctx PESections_Begin %assign PESectionCur_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign-1)/PEOptionalHeader_Va)+1)*PEOptionalHeader_Va SECTION .bss PESection.bss_Begin_FAa: %define PESectionCur_FAa_Define PESection.bss_Begin_FAa %push PESection.bss_Begin %else %error PE.INC error: PESection.bss_Begin => PESections_Begin %endif %endmacro %macro PESection.bss_End 0 %ifctx PESection.bss_Begin PESection.bss_End_FA: ResbAlign PESection.bss_Begin_FAa,PEOptionalHeader_Va PESection.bss_End_FAa: %assign PEHeader_SectionsNumber_Assign PEHeader_SectionsNumber_Assign+1 PESection.bss_VS equ PESection.bss_End_FA-PESection.bss_Begin_FAa PESection.bss_VSa equ PESection.bss_End_FAa-PESection.bss_Begin_FAa SECTION .text %assign PESectionPrec_RVAa_Assign PESectionCur_RVAa_Assign PESection.bss_RVAa equ PESectionPrec_RVAa_Assign PESection.bss_FSa equ 0 %assign PESectionPrec_FSa_Assign PESection.bss_VSa PESectionHeader.bss_FAa equ 0 %pop %else %error PE.INC error: PESection.bss_End => PESection.bss_Begin %endif %endmacro %macro PESection.idata_Begin 0 %ifctx PESections_Begin %assign PESectionCur_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign-1)/PEOptionalHeader_Va)+1)*PEOptionalHeader_Va PESection.idata_Begin_FAa: %define PESectionCur_FAa_Define PESection.idata_Begin_FAa %push PESection.idata_Begin %else %error PE.INC error: PESection.idata_Begin => PESections_Begin %endif %endmacro %macro PESection.idata_End 0 %ifctx PESection.idata_Begin MacroPESection_End .idata %assign PESectionPrec_RVAa_Assign PESectionCur_RVAa_Assign PESection.idata_RVAa equ PESectionPrec_RVAa_Assign PESection.idata_FSa equ PESection.idata_End_FAa-PESection.idata_Begin_FAa PESectionHeader.idata_FAa equ PESection.idata_Begin_FAa %assign PESectionPrec_FSa_Assign PESection.idata_FSa %pop %else %error PE.INC error: PESection.idata_End => PESection.idata_Begin %endif %endmacro %macro PESection.rsrc_Begin 0 %ifctx PESections_Begin %assign PESectionCur_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign-1)/PEOptionalHeader_Va)+1)*PEOptionalHeader_Va PESection.rsrc_Begin_FAa: %define PESectionCur_FAa_Define PESection.rsrc_Begin_FAa %push PESection.rsrc_Begin %else %error PE.INC error: PESection.rsrc_Begin => PESections_Begin %endif %endmacro %macro PESection.rsrc_End 0 %ifctx PESection.rsrc_Begin MacroPESection_End .rsrc %assign PESectionPrec_RVAa_Assign PESectionCur_RVAa_Assign PESection.rsrc_RVAa equ PESectionPrec_RVAa_Assign PESection.rsrc_FSa equ PESection.rsrc_End_FAa-PESection.rsrc_Begin_FAa PESectionHeader.rsrc_FAa equ PESection.rsrc_Begin_FAa %assign PESectionPrec_FSa_Assign PESection.rsrc_FSa %pop %else %error PE.INC error: PESection.rsrc_End => PESection.rsrc_Begin %endif %endmacro %macro PESections_End 0 %ifctx PESections_Begin PESections_End_FAa: PEHeader_SectionsNumber equ PEHeader_SectionsNumber_Assign PEOptionalHeader_InitializedDataFSa equ PEOptionalHeader_InitializedDataFSa_Assign PEOptionalHeader_DataRVAa equ PEOptionalHeader_DataRVAa_Assign %assign PESectionPrec_RVAa_Assign (((PESectionPrec_RVAa_Assign+PESectionPrec_FSa_Assign) / PEOptionalHeader_Va)+1)*PEOptionalHeader_Va PEOptionalHeader_ImageVSa equ PESectionPrec_RVAa_Assign Import_Directorys_RVA equ Import_Directorys_Assign %repl PESections_End %else %error PE.INC error: PESections_End => PESections_Begin %endif %endmacro ;============================= Import Directorys ============================= ;Import_Directorys_Begin sectionname %macro Import_Directorys_Begin 1 Import_Directorys_Begin_FA: %assign Import_Directorys_Assign PESectionCur_RVAa_Assign+Import_Directorys_Begin_FA-PESectionCur_FAa_Define %push Import_Directorys_Begin %endmacro ;Import_Directory dlllogicalname %macro Import_Directory 1 %ifctx Import_Directorys_Begin dd PESection_RVA(Import.%1_RVAs) dd 0 ;??? (date � 0) dd 0FFFFFFFFh dd PESection_RVA(Import.%1_String_Dll) dd PESection_RVA(Import.%1_VAs) %else %error PE.INC error: Import_Directory => Import_Directorys_Begin %endif %endmacro %macro Import_Directorys_End 0 %ifctx Import_Directorys_Begin times 5 dd 0 Import_Directorys_End_FA: Import_Directorys_VS equ Import_Directorys_End_FA-Import_Directorys_Begin_FA %pop %else %error PE.INC error: Import_Directorys_End => Import_Directorys_Begin %endif %endmacro ;Import_RVAs_Begin dlllogicalname %macro Import_RVAs_Begin 1 Import.%1_RVAs: %push Import_RVAs_Begin %endmacro ;Import_RVA dlllogicalname,functionlogicalname %macro Import_RVA 2 %ifctx Import_RVAs_Begin dd PESection_RVA(Import.%1.%2_String_Function) %else %error PE.INC error: Import_RVA => Import_RVAs_Begin %endif %endmacro %macro Import_RVAs_End 0 %ifctx Import_RVAs_Begin dd 0 %pop %else %error PE.INC error: Import_RVAs_End => Import_RVAs_Begin %endif %endmacro ;Import_VAs_Begin dlllogicalname %macro Import_VAs_Begin 1 Import.%1_VAs: %push Import_VAs_Begin %endmacro ;Import_VA dlllogicalname,functionlogicalname,[va] %macro Import_VA 2-3 0FFFFFFFFh %ifctx Import_VAs_Begin Import.%1.%2: dd %3 %2 equ PEOptionalHeader_ImageVAa+PESectionCur_RVAa_Assign+Import.%1.%2-PESectionCur_FAa_Define %else %error PE.INC error: Import_VA => Import_VAs_Begin %endif %endmacro %macro Import_VAs_End 0 %ifctx Import_VAs_Begin dd 0 %pop %else %error PE.INC error: Import_VAs_End => Import_VAs_Begin %endif %endmacro ;Import_Strings_Begin dlllogicalname %macro Import_Strings_Begin 1 Import.%1_Strings: %push Import_Strings_Begin %endmacro ;Import_String_Function dlllogicalname,functionlogicalname,"name",[ordinal] %macro Import_String_Function 3-4 0h %ifctx Import_Strings_Begin Import.%1.%2_String_Function: dw %4 db %3,0 %else %error PE.INC error: Import_String_Function => Import_Strings_Begin %endif %endmacro ;Import_String_Dll dlllogicalname,"dllname" %macro Import_String_Dll 2 %ifctx Import_Strings_Begin Import.%1_String_Dll: db %2,0 %repl Import_String_Dll %else %error PE.INC error: Import_String_Dll => Import_Strings_Begin %endif %endmacro %macro Import_Strings_End 0 %ifctx Import_String_Dll %pop %else %error PE.INC error: Import_Strings_End => Import_String_Dll %endif %endmacro ;================================== BIN End ================================== %macro BIN_End 0 %ifctx PESections_End BIN_End_FA: DbAlign BIN_Begin_FA,PEOptionalHeader_Fa BIN_End_FAa: %pop %else %error PE.INC error: BIN_End => PESections_End %endif %endmacro %endif