Allow makensis to use stubs and plugins of different bitness, based on patch #265

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6619 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2015-10-01 17:32:56 +00:00
parent 8577c8e9ae
commit 12cab3f3db
8 changed files with 91 additions and 65 deletions

View file

@ -105,11 +105,18 @@ typedef struct RESOURCE_DIRECTORY {
MY_IMAGE_RESOURCE_DIRECTORY_ENTRY Entries[1];
} *PRESOURCE_DIRECTORY;
#define GetMemberFromOptionalHeader(optionalHeader, member) \
( (optionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) ? \
&((PIMAGE_OPTIONAL_HEADER32)&optionalHeader)->member : \
&((PIMAGE_OPTIONAL_HEADER64)&optionalHeader)->member \
)
#define GetCommonStructField(ref, s1, s2, fld) \
( (&((ref).fld))[(1 / ( 0 + !!(FIELD_OFFSET(s1, fld) == FIELD_OFFSET(s2, fld) && sizeof(((s1*)0)->fld) == sizeof(((s2*)0)->fld)) )) - 1] ) // Try to fail at compile-time if the field is not at the same offset in both structs or does not have the same size
#define GetCommonMemberFromPEOptHdr(OptHdr, Member) \
( &GetCommonStructField(OptHdr, IMAGE_OPTIONAL_HEADER32, IMAGE_OPTIONAL_HEADER64, Member) )
#define GetMemberFromPEOptHdrEx(OptHdr, Member, Sixtyfour) \
( (Sixtyfour) ? \
&((PIMAGE_OPTIONAL_HEADER64)&(OptHdr))->Member : \
&((PIMAGE_OPTIONAL_HEADER32)&(OptHdr))->Member \
)
#define GetMemberFromPEOptHdr(OptHdr, Member) \
( GetMemberFromPEOptHdrEx(OptHdr, Member, ((OptHdr).Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)) )
class CResourceEditor {
public:
CResourceEditor(BYTE* pbPE, int iSize, bool bKeepData = true);