⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x86s_decode.h

📁 当前支持 16-bit, 32-bit and 64-bit 的二进制文件
💻 H
字号:
// x86s_decode.h
// Copyright (C) 2008 Willow Schlanger

#ifndef l_x86s__x86s_decode_h__included
#define l_x86s__x86s_decode_h__included

#include "types.h"
#include "x86s_common.h"

namespace x86s
{

#include "out_insn_enums.h"

struct decode_state_t
{
	icode_t *icode;		// [out--but pointer must be loaded by user] where to decode to
	const U1 *insn;		// [in] subtract from buffer base to find current insn offset
	const U1 *end;		// [in] (end - insn) = max_bytes_left. (max_bytes_left - size) = bytes_left.

	U4 dsz : 2;			// [in] default operand and address size - argsize_16, argsize_32, or argsize_64
	U4 encoding : 24;	// [out] 0xffffff means invalid opcode
	U4 avl1 : 6;
	
	U2 basecode;		// [out] only 10 bits used
	U1 size;			// [out]
	U1 modrm0;			// [out]
};

// Return codes.
// 0 : success
// 1 : s.icode, s.basecode, s.size, s.modrm0 undefined.
//     exceeded limit while decoding.
// 2 : invalid opcode - opcode invalid when dsz is 64
// 3 : invalid opcode - general
// 4 : invalid opcode - or internal error!
int decode(decode_state_t &s);

extern encoding_t encodings[];
extern int search_table[];
extern const char *insn_strings[insn__count];
extern insn_def_t insns[insn__count];
extern U4 decoder_table[];

}	// namespace x86s

#endif	// l_x86s__x86s_decode_h__included

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -