summaryrefslogtreecommitdiff
path: root/arch/arm64/disassembler/gofer.c
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2024-03-05 19:50:13 -0500
committerRusty Wagner <rusty.wagner@gmail.com>2024-03-05 20:34:34 -0500
commite093c21ed880ac3eb72119be15093ee04f8ce299 (patch)
tree9f720ebdc0ae415734b1199ed341668c69710a94 /arch/arm64/disassembler/gofer.c
parent0609276712622908254065546102381466033141 (diff)
Move architecture modules into the API repo
Diffstat (limited to 'arch/arm64/disassembler/gofer.c')
-rw-r--r--arch/arm64/disassembler/gofer.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/arm64/disassembler/gofer.c b/arch/arm64/disassembler/gofer.c
new file mode 100644
index 00000000..7f0df371
--- /dev/null
+++ b/arch/arm64/disassembler/gofer.c
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include "decode.h"
+#include "format.h"
+
+void disassemble(uint64_t addr, uint8_t *data, int len, char *result, bool verbose)
+{
+ Instruction instr;
+ memset(&instr, 0, sizeof(instr));
+
+ aarch64_decompose(*(uint32_t *)data, &instr, addr);
+
+ aarch64_disassemble(&instr, result, 1024);
+}
+
+uint32_t get_encoding(uint8_t *data)
+{
+ Instruction instr;
+ //printf("sizeof(instr): %lu\n", sizeof(instr));
+ //printf("sizeof(instr.encoding): %lu\n", sizeof(instr.encoding));
+ memset(&instr, 0, sizeof(instr));
+ aarch64_decompose(*(uint32_t *)data, &instr, 0);
+ return instr.encoding;
+}