From ec5266294cc6a7116daadd981b7ca6764f46eab3 Mon Sep 17 00:00:00 2001 From: Rong Tao Date: Sat, 4 Jan 2025 13:56:28 +0800 Subject: [PATCH] ultask: Add run_disasm() Signed-off-by: Rong Tao --- src/ultask.c | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/ultask.c b/src/ultask.c index b9a9732b..fa33413c 100644 --- a/src/ultask.c +++ b/src/ultask.c @@ -782,6 +782,34 @@ int run_jmp(void) return err; } +int run_disasm(void) +{ + void *mem; + int ret = 0; + + if (!disasm_addr || !disasm_size) + return 0; + + mem = malloc(disasm_size); + + ret = memcpy_from_task(target_task, mem, disasm_addr, disasm_size); + if (ret <= 0) { + fprintf(stderr, "Bad address 0x%lx\n", disasm_addr); + ret = -ENOMEM; + goto done; + } + + print_string_hex(stdout, "Hex: ", mem, disasm_size); + ret = fdisasm_arch(stdout, NULL, 0, mem, disasm_size); + if (ret) { + fprintf(stderr, "Disasm failed\n"); + } + +done: + free(mem); + return ret; +} + int ultask(int argc, char *argv[]) { int ret = 0; @@ -850,21 +878,7 @@ int ultask(int argc, char *argv[]) dump_task_fds(stdout, target_task, is_verbose()); run_jmp(); - - if (disasm_addr && disasm_size) { - void *mem = malloc(disasm_size); - ret = memcpy_from_task(target_task, mem, disasm_addr, disasm_size); - if (ret <= 0) { - fprintf(stderr, "Bad address 0x%lx\n", disasm_addr); - } else { - print_string_hex(stdout, "Hex: ", mem, disasm_size); - ret = fdisasm_arch(stdout, NULL, 0, mem, disasm_size); - if (ret) { - fprintf(stderr, "Disasm failed\n"); - } - } - free(mem); - } + run_disasm(); close_task(target_task); return ret;