From 79bd7a836601d587f69178a1604fabdffe67341c Mon Sep 17 00:00:00 2001 From: Nguyen Anh Quynh <aquynh@gmail.com> Date: Tue, 3 May 2016 21:31:51 +0800 Subject: [PATCH] kstool: only report archs supported by the core. this fixes issue #24 --- kstool/kstool.c | 72 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/kstool/kstool.c b/kstool/kstool.c index 8262bd9..f93875a 100644 --- a/kstool/kstool.c +++ b/kstool/kstool.c @@ -12,30 +12,54 @@ static void usage(char *prog) printf("Kstool v%s for Keystone Assembler Engine (www.keystone-engine.org)\nBy Nguyen Anh Quynh, 2016\n\n", VERSION); printf("Syntax: %s <arch+mode> <assembly-string>\n", prog); printf("\nThe following <arch+mode> options are supported:\n"); - printf(" x16: X86 16bit, Intel syntax\n"); - printf(" x32: X86 32bit, Intel syntax\n"); - printf(" x64: X86 64bit, Intel syntax\n"); - printf(" x16att: X86 16bit, AT&T syntax\n"); - printf(" x32att: X86 32bit, AT&T syntax\n"); - printf(" x64att: X86 64bit, AT&T syntax\n"); - printf(" arm: ARM - little endian\n"); - printf(" armbe: ARM - big endian\n"); - printf(" thumb: Thumb - little endian\n"); - printf(" thumbbe: Thumb - big endian\n"); - printf(" arm64: AArch64\n"); - printf(" hexagon: Hexagon\n"); - printf(" mips: Mips - little endian\n"); - printf(" mipsbe: Mips - big endian\n"); - printf(" mips64: Mips64 - little endian\n"); - printf(" mips64be: Mips64 - big endian\n"); - printf(" ppc32be: PowerPC32 - big endian\n"); - printf(" ppc64: PowerPC64 - little endian\n"); - printf(" ppc64be: PowerPC64 - big endian\n"); - printf(" sparc: Sparc - little endian\n"); - printf(" sparcbe: Sparc - big endian\n"); - printf(" sparc64: Sparc64 - little endian\n"); - printf(" sparc64be: Sparc64 - big endian\n"); - printf(" systemz: SystemZ (S390x)\n"); + + if (ks_arch_supported(KS_ARCH_X86)) { + printf(" x16: X86 16bit, Intel syntax\n"); + printf(" x32: X86 32bit, Intel syntax\n"); + printf(" x64: X86 64bit, Intel syntax\n"); + printf(" x16att: X86 16bit, AT&T syntax\n"); + printf(" x32att: X86 32bit, AT&T syntax\n"); + printf(" x64att: X86 64bit, AT&T syntax\n"); + } + + if (ks_arch_supported(KS_ARCH_ARM)) { + printf(" arm: ARM - little endian\n"); + printf(" armbe: ARM - big endian\n"); + printf(" thumb: Thumb - little endian\n"); + printf(" thumbbe: Thumb - big endian\n"); + } + + if (ks_arch_supported(KS_ARCH_ARM64)) { + printf(" arm64: AArch64\n"); + } + + if (ks_arch_supported(KS_ARCH_HEXAGON)) { + printf(" hexagon: Hexagon\n"); + } + + if (ks_arch_supported(KS_ARCH_MIPS)) { + printf(" mips: Mips - little endian\n"); + printf(" mipsbe: Mips - big endian\n"); + printf(" mips64: Mips64 - little endian\n"); + printf(" mips64be: Mips64 - big endian\n"); + } + + if (ks_arch_supported(KS_ARCH_PPC)) { + printf(" ppc32be: PowerPC32 - big endian\n"); + printf(" ppc64: PowerPC64 - little endian\n"); + printf(" ppc64be: PowerPC64 - big endian\n"); + } + + if (ks_arch_supported(KS_ARCH_SPARC)) { + printf(" sparc: Sparc - little endian\n"); + printf(" sparcbe: Sparc - big endian\n"); + printf(" sparc64: Sparc64 - little endian\n"); + printf(" sparc64be: Sparc64 - big endian\n"); + } + + if (ks_arch_supported(KS_ARCH_SYSTEMZ)) { + printf(" systemz: SystemZ (S390x)\n"); + } } int main(int argc, char **argv) -- GitLab