diff --git a/include/Asm/arch.h b/include/Asm/arch.h index 7cc8e7e..aa3f9a8 100644 --- a/include/Asm/arch.h +++ b/include/Asm/arch.h @@ -29,15 +29,16 @@ typedef struct _Arch Arch; typedef enum _ArchEndian { - ARCH_ENDIAN_BIG = 0, - ARCH_ENDIAN_LITTLE, - ARCH_ENDIAN_BOTH + ARCH_ENDIAN_BIG = 0x1, + ARCH_ENDIAN_LITTLE = 0x2, + ARCH_ENDIAN_BOTH = 0x3 } ArchEndian; typedef struct _ArchDescription { - char const * format; /* default format */ + char const * format; /* default format plug-in */ ArchEndian endian; + uint32_t address_size; uint32_t alignment; uint32_t instruction_size; /* 0 if not constant */ } ArchDescription; diff --git a/src/arch/amd64.c b/src/arch/amd64.c index 480b1f7..d6b66e2 100644 --- a/src/arch/amd64.c +++ b/src/arch/amd64.c @@ -46,6 +46,11 @@ enum /* variables */ +static ArchDescription _amd64_description = +{ + "elf", ARCH_ENDIAN_LITTLE, 64, 8, 0 +}; + #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _amd64_registers[] = { @@ -78,7 +83,7 @@ ArchPlugin arch_plugin = { NULL, "amd64", - NULL, + &_amd64_description, _amd64_registers, _amd64_instructions, NULL, diff --git a/src/arch/arm.c b/src/arch/arm.c index 99fd70d..0e0e1cc 100644 --- a/src/arch/arm.c +++ b/src/arch/arm.c @@ -33,7 +33,10 @@ enum /* variables */ -static ArchDescription _arm_description = { "elf", ARCH_ENDIAN_BIG, 32, 32 }; +static ArchDescription _arm_description = +{ + "elf", ARCH_ENDIAN_BOTH, 32, 32, 32 +}; #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _arm_registers[] = diff --git a/src/arch/dalvik.c b/src/arch/dalvik.c index a5199ef..570640a 100644 --- a/src/arch/dalvik.c +++ b/src/arch/dalvik.c @@ -56,7 +56,9 @@ enum /* variables */ /* plug-in */ static ArchDescription _dalvik_description = -{ "dex", ARCH_ENDIAN_LITTLE, 2, 0 }; +{ + "dex", ARCH_ENDIAN_LITTLE, 32, 16, 0 +}; #define REG(name, size, id) { "" # name, size, id }, diff --git a/src/arch/i386.c b/src/arch/i386.c index 25887d2..d05cf52 100644 --- a/src/arch/i386.c +++ b/src/arch/i386.c @@ -43,6 +43,11 @@ enum /* variables */ +static ArchDescription _i386_description = +{ + "elf", ARCH_ENDIAN_LITTLE, 32, 8, 0 +}; + #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _i386_registers[] = { @@ -70,7 +75,7 @@ ArchPlugin arch_plugin = { NULL, "i386", - NULL, + &_i386_description, _i386_registers, _i386_instructions, NULL, diff --git a/src/arch/i386_real.c b/src/arch/i386_real.c index 828df1a..2180d83 100644 --- a/src/arch/i386_real.c +++ b/src/arch/i386_real.c @@ -44,6 +44,11 @@ enum /* variables */ +static ArchDescription _i386_real_description = +{ + "elf", ARCH_ENDIAN_LITTLE, 20, 8, 0 +}; + #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _i386_real_registers[] = { @@ -71,7 +76,7 @@ ArchPlugin arch_plugin = { NULL, "i386_real", - NULL, + &_i386_real_description, _i386_real_registers, _i386_real_instructions, NULL, diff --git a/src/arch/i486.c b/src/arch/i486.c index 9bad1f4..a07206c 100644 --- a/src/arch/i486.c +++ b/src/arch/i486.c @@ -43,6 +43,11 @@ enum /* variables */ +static ArchDescription _i486_description = +{ + "elf", ARCH_ENDIAN_LITTLE, 32, 8, 0 +}; + #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _i486_registers[] = { @@ -71,7 +76,7 @@ ArchPlugin arch_plugin = { NULL, "i486", - NULL, + &_i486_description, _i486_registers, _i486_instructions, NULL, diff --git a/src/arch/i586.c b/src/arch/i586.c index 49bb474..a3434c7 100644 --- a/src/arch/i586.c +++ b/src/arch/i586.c @@ -43,6 +43,11 @@ enum /* variables */ +static ArchDescription _i586_description = +{ + "elf", ARCH_ENDIAN_LITTLE, 32, 8, 0 +}; + #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _i586_registers[] = { @@ -72,7 +77,7 @@ ArchPlugin arch_plugin = { NULL, "i586", - NULL, + &_i586_description, _i586_registers, _i586_instructions, NULL, diff --git a/src/arch/i686.c b/src/arch/i686.c index 1aa00fd..4a234e4 100644 --- a/src/arch/i686.c +++ b/src/arch/i686.c @@ -44,6 +44,11 @@ enum /* variables */ +static ArchDescription _i686_description = +{ + "elf", ARCH_ENDIAN_LITTLE, 32, 8, 0 +}; + #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _i686_registers[] = { @@ -74,7 +79,7 @@ ArchPlugin arch_plugin = { NULL, "i686", - NULL, + &_i686_description, _i686_registers, _i686_instructions, NULL, diff --git a/src/arch/java.c b/src/arch/java.c index 6d06233..c2af640 100644 --- a/src/arch/java.c +++ b/src/arch/java.c @@ -25,7 +25,10 @@ /* Java */ /* private */ /* variables */ -static ArchDescription _java_description = { "java", ARCH_ENDIAN_BIG, 1, 0 }; +static ArchDescription _java_description = +{ + "java", ARCH_ENDIAN_BIG, 32, 8, 0 +}; static ArchRegister _java_registers[] = { diff --git a/src/arch/mips.c b/src/arch/mips.c index b61eed2..4ed41fe 100644 --- a/src/arch/mips.c +++ b/src/arch/mips.c @@ -22,7 +22,10 @@ /* mips */ /* private */ /* variables */ -static ArchDescription _mips_description = { "elf", ARCH_ENDIAN_BIG, 32, 32 }; +static ArchDescription _mips_description = +{ + "elf", ARCH_ENDIAN_BOTH, 32, 32, 32 +}; #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _mips_registers[] = diff --git a/src/arch/sparc.c b/src/arch/sparc.c index c856507..e524140 100644 --- a/src/arch/sparc.c +++ b/src/arch/sparc.c @@ -22,7 +22,10 @@ /* sparc */ /* private */ /* variables */ -static ArchDescription _sparc_description = { "elf", ARCH_ENDIAN_BIG, 32, 32 }; +static ArchDescription _sparc_description = +{ + "elf", ARCH_ENDIAN_BIG, 32, 32, 32 +}; #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _sparc_registers[] = diff --git a/src/arch/sparc64.c b/src/arch/sparc64.c index 7519fee..bbe96d1 100644 --- a/src/arch/sparc64.c +++ b/src/arch/sparc64.c @@ -23,7 +23,9 @@ /* private */ /* variables */ static ArchDescription _sparc64_description = -{ "elf", ARCH_ENDIAN_BIG, 32, 32 }; +{ + "elf", ARCH_ENDIAN_BIG, 64, 32, 32 +}; #define REG(name, size, id) { "" # name, size, id }, static ArchRegister _sparc64_registers[] =