Files
metasploit-gs/external/source/shellcode/windows/templates/inc/pe.inc
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

655 lines
23 KiB
PHP
Raw Normal View History

;corriger ;???
;raison inconnue ; ?
;gestion message d'erreur structures (%error)
; %define et %ifdef pour tester l'existence de header ncessaires
; (pour viter les erreurs de label indfinis)
;.edata,.rsrc (icones)
;supprimer macro Directories ? (calcul automatique ?)
; MACROS AND DEFINITIONS FOR PE FILES v1.0a
; =========================================
;By rix-shogun-agressor (erix@mail.dotcom.fr,rix@dreamnet.org)
;conventions:
;xxx_VA: adresse virtuelle (adresse en mmoire)
;xxx_RVA: dplacement d'adresse virtuel (offset d'adresse en mmoire%baseVA)
;xxx_VS: taille virtuelle (taille en mmoire)
;xxx_FS: taille fichier
;xxx_FA: adresse fichier (offset dans le fichier)
;xxx_Fa: file alignement
;xxx-Va: virtual alignement (alignement mmoire)
;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 dfinitions des header: NOM[SousNom]_Begin NOM[SousNom]_End
; ou bien: NOM[SousNom]
;define de dfinitions 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 calcule d'aprŠs nombres suivants l'endroit de stockage
;%define: dclaration des constantes utilisables par l'utilisateur
;%assign: dclaration 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 mmoire
%define MZHeader_MaximumMemory 0FFFFh ;en paragraphes, ajouter en fin de mmoire
%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 ;excutable/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