655 lines
23 KiB
PHP
655 lines
23 KiB
PHP
;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 (erix@mail.dotcom.fr,rix@dreamnet.org)
|
||
|
||
;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
|