Skip to content
Snippets Groups Projects
Commit 986b7367 authored by Nguyen Anh Quynh's avatar Nguyen Anh Quynh
Browse files

arm: handle V8 mode

parent ba961552
No related branches found
No related tags found
No related merge requests found
...@@ -40,6 +40,10 @@ static void usage(char *prog) ...@@ -40,6 +40,10 @@ static void usage(char *prog)
printf(" armbe: ARM - big endian\n"); printf(" armbe: ARM - big endian\n");
printf(" thumb: Thumb - little endian\n"); printf(" thumb: Thumb - little endian\n");
printf(" thumbbe: Thumb - big endian\n"); printf(" thumbbe: Thumb - big endian\n");
printf(" armv8: ARM V8 - little endian\n");
printf(" armv8be: ARM V8 - big endian\n");
printf(" thumbv8: Thumb V8 - little endian\n");
printf(" thumbv8be: Thumb V8 - big endian\n");
} }
if (ks_arch_supported(KS_ARCH_ARM64)) { if (ks_arch_supported(KS_ARCH_ARM64)) {
...@@ -207,6 +211,22 @@ int main(int argc, char **argv) ...@@ -207,6 +211,22 @@ int main(int argc, char **argv)
err = ks_open(KS_ARCH_ARM, KS_MODE_THUMB+KS_MODE_BIG_ENDIAN, &ks); err = ks_open(KS_ARCH_ARM, KS_MODE_THUMB+KS_MODE_BIG_ENDIAN, &ks);
} }
if (!strcmp(mode, "armv8")) {
err = ks_open(KS_ARCH_ARM, KS_MODE_ARM+KS_MODE_LITTLE_ENDIAN+KS_MODE_V8, &ks);
}
if (!strcmp(mode, "armv8be")) {
err = ks_open(KS_ARCH_ARM, KS_MODE_ARM+KS_MODE_BIG_ENDIAN+KS_MODE_V8, &ks);
}
if (!strcmp(mode, "thumbv8")) {
err = ks_open(KS_ARCH_ARM, KS_MODE_THUMB+KS_MODE_LITTLE_ENDIAN+KS_MODE_V8, &ks);
}
if (!strcmp(mode, "thumbv8be")) {
err = ks_open(KS_ARCH_ARM, KS_MODE_THUMB+KS_MODE_BIG_ENDIAN+KS_MODE_V8, &ks);
}
if (!strcmp(mode, "arm64")) { if (!strcmp(mode, "arm64")) {
err = ks_open(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN, &ks); err = ks_open(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN, &ks);
} }
......
...@@ -266,16 +266,36 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result) ...@@ -266,16 +266,36 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result)
return KS_ERR_MODE; return KS_ERR_MODE;
} }
if (mode & KS_MODE_THUMB) { switch(mode) {
if (mode & KS_MODE_BIG_ENDIAN) default:
TripleName = "thumbebv7"; return KS_ERR_MODE;
else // big-endian
TripleName = "thumbv7"; case KS_MODE_BIG_ENDIAN | KS_MODE_V8 | KS_MODE_ARM:
} else { TripleName = "armv8eb";
if (mode & KS_MODE_BIG_ENDIAN) break;
case KS_MODE_BIG_ENDIAN | KS_MODE_V8 | KS_MODE_THUMB:
TripleName = "thumbv8eb";
break;
case KS_MODE_BIG_ENDIAN | KS_MODE_ARM:
TripleName = "armv7eb"; TripleName = "armv7eb";
else break;
case KS_MODE_BIG_ENDIAN | KS_MODE_THUMB:
TripleName = "thumbebv7";
break;
// little-endian
case KS_MODE_LITTLE_ENDIAN | KS_MODE_V8 | KS_MODE_ARM:
TripleName = "armv8";
break;
case KS_MODE_LITTLE_ENDIAN | KS_MODE_V8 | KS_MODE_THUMB:
TripleName = "thumbv8";
break;
case KS_MODE_LITTLE_ENDIAN | KS_MODE_ARM:
TripleName = "armv7"; TripleName = "armv7";
break;
case KS_MODE_LITTLE_ENDIAN | KS_MODE_THUMB:
TripleName = "thumbv7";
break;
} }
InitKs(arch, ks, TripleName); InitKs(arch, ks, TripleName);
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// These are masks of supported modes for each cpu/arch. // These are masks of supported modes for each cpu/arch.
// They should be updated when changes are made to the ks_mode enum typedef. // They should be updated when changes are made to the ks_mode enum typedef.
#define KS_MODE_ARM_MASK (KS_MODE_ARM|KS_MODE_THUMB|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN) #define KS_MODE_ARM_MASK (KS_MODE_ARM|KS_MODE_THUMB|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN|KS_MODE_V8)
#define KS_MODE_MIPS_MASK (KS_MODE_MIPS32|KS_MODE_MIPS64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN) #define KS_MODE_MIPS_MASK (KS_MODE_MIPS32|KS_MODE_MIPS64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN)
#define KS_MODE_X86_MASK (KS_MODE_16|KS_MODE_32|KS_MODE_64|KS_MODE_LITTLE_ENDIAN) #define KS_MODE_X86_MASK (KS_MODE_16|KS_MODE_32|KS_MODE_64|KS_MODE_LITTLE_ENDIAN)
#define KS_MODE_PPC_MASK (KS_MODE_PPC32|KS_MODE_PPC64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN) #define KS_MODE_PPC_MASK (KS_MODE_PPC32|KS_MODE_PPC64|KS_MODE_LITTLE_ENDIAN|KS_MODE_BIG_ENDIAN)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment