rizin/librz/arch/arch-asm/luac/lua_arch.h
2024-03-07 18:38:49 +08:00

63 lines
2.3 KiB
C

// SPDX-License-Identifier: LGPL-3.0-only
// SPDX-FileCopyrightText: 2021 Heersin <teablearcher@gmail.com>
#ifndef BUILD_LUA_ARCH_H
#define BUILD_LUA_ARCH_H
#include <rz_types.h>
#include <rz_asm.h>
/* Prefix of lua op arguments */
#define LUA_REG_PREF "R"
#define LUA_CONST_PREF "CONST"
#define LUA_KR_PREF "R/CONST"
#define LUA_UPVALUE_PREF "UPV"
#define LUA_EVENT_PREF "EVENT"
#define LUA_KPROTO_PREF "KPROTO"
#define LUA_NO_PREFIX ""
/* Comment Mark */
#define LUA_EXTRAARG_MARK "#Ex"
#define LUA_KFLAG_MARK "#Kflag"
#define LUA_JMP_MARK "#To"
#define LUA_CLOSURE_MARK "#CLOSURE"
#define LUA_KX_MARK " CONST[#Ex]"
/* Opcode Instruction Type */
typedef ut32 LuaInstruction;
/* opcode names */
typedef char **LuaOpNameList;
/* convert a 4-byte ut8 buffer into a lua instruction (ut32) */
LuaInstruction lua_build_instruction(const ut8 *buf);
void lua_set_instruction(LuaInstruction instruction, ut8 *data);
int lua_load_next_arg_start(const char *raw_string, char *recv_buf);
bool lua_is_valid_num_value_string(const char *str);
int lua_convert_str_to_num(const char *str);
/* formatted output strings */
char *luaop_new_str_3arg(char *opname, int a, int b, int c);
char *luaop_new_str_2arg(char *opname, int a, int b);
char *luaop_new_str_1arg(char *opname, int a);
char *luaop_new_str_3arg_ex(char *opname, int a, int b, int c, int isk);
char *luaop_new_str_2arg_ex(char *opname, int a, int b, int isk);
char *luaop_new_str_1arg_ex(char *opname, int a, int isk);
/* Free Opname List */
bool free_lua_opnames(LuaOpNameList list);
/* Lua 5.4 specified */
int lua54_disasm(RzAsmOp *op, const ut8 *buf, int len, LuaOpNameList oplist);
int lua54_anal_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len);
bool lua54_assembly(const char *input, st32 input_size, LuaInstruction *instruction);
LuaOpNameList get_lua54_opnames(void);
ut8 get_lua54_opcode_by_name(const char *name, int len);
/* Lua 5.3 specified */
int lua53_disasm(RzAsmOp *op, const ut8 *buf, int len, LuaOpNameList oplist);
int lua53_anal_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len);
bool lua53_assembly(const char *input, st32 input_size, LuaInstruction *instruction);
LuaOpNameList get_lua53_opnames(void);
ut8 get_lua53_opcode_by_name(const char *name, int len);
#endif // BUILD_LUA_ARCH_H