From 585d940ece565a1b8423b8c277c469d3ab70aa0e Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Wed, 14 Aug 2024 01:27:40 +0300 Subject: [PATCH] add x86 instruction set lookup table, compressed in gzip to avoid diff clogging --- Makefile | 9 +++++++-- include/rtdisasm_table.h | 30 ++++++++++++++++++++++++++++++ src/rtdisasm_table.cgz | Bin 0 -> 8247 bytes 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 include/rtdisasm_table.h create mode 100644 src/rtdisasm_table.cgz diff --git a/Makefile b/Makefile index ec479dd..54e74aa 100644 --- a/Makefile +++ b/Makefile @@ -8,14 +8,15 @@ CC = gcc AS = as AR = ar LD = ld +GZIP = gzip CFLAGS = -Wall -I$(INC_DIR) ASFLAGS = LDFLAGS = -z noexecstack -lcap RTDISASM_SRC = rtdisasm.c -RTDISASM_OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(RTDISASM_SRC)))) +RTDISASM_OBJ := $(addprefix $(OBJ_DIR)/,$(patsubst %.s,%.o,$(patsubst %.c,%.o,$(RTDISASM_SRC)))) $(OBJ_DIR)/rtdisasm_table.o RTDISASM_SRC := $(addprefix $(SRC_DIR)/,$(RTDISASM_SRC)) -RTDISASM_DEPS = rtdisasm.h +RTDISASM_DEPS = rtdisasm.h rtdisasm_table.h RTDISASM_DEPS := $(addprefix $(INC_DIR)/,$(RTDISASM_DEPS)) RTDISASM_TEST_SRC = rtdisasm_test.c @@ -37,6 +38,10 @@ DUMMY_TARGET_SRC := $(addprefix $(SRC_DIR)/,$(DUMMY_TARGET_SRC)) $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -c -o $@ $< +# compressed C files +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cgz + $(GZIP) -d -c $< | $(CC) -x c $(CFLAGS) -c -o $@ - + $(OBJ_DIR)/%.o: $(SRC_DIR)/%.s $(AS) $(ASFLAGS) -o $@ $< diff --git a/include/rtdisasm_table.h b/include/rtdisasm_table.h new file mode 100644 index 0000000..e96f9f4 --- /dev/null +++ b/include/rtdisasm_table.h @@ -0,0 +1,30 @@ +#ifndef __RTDISASM_TABLE_H +#define __RTDISASM_TABLE_H + +#include + +#define INSTRUCTION_STANDARD 0 +#define INSTRUCTION_VEX 1 +#define INSTRUCTION_EVEX 2 + +#define MAX_OPCODE_LEN 4 + +typedef struct { + struct { + uint16_t type : 4; + uint16_t has_rex : 1; + uint16_t has_digit : 1; + uint16_t has_modrm : 1; + uint16_t has_imm : 1; + uint16_t has_value : 1; + uint16_t has_opreg : 1; + } info; + + uint16_t opcode_len; + uint8_t opcode[MAX_OPCODE_LEN]; +} instruction_t; + +extern const instruction_t rtdisasm_table[]; +extern const unsigned rtdisasm_table_len; + +#endif \ No newline at end of file diff --git a/src/rtdisasm_table.cgz b/src/rtdisasm_table.cgz new file mode 100644 index 0000000000000000000000000000000000000000..b6b89523789f6786ae698bacc05b77dce1ca3737 GIT binary patch literal 8247 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