OpTypes

#define MS_0TYPE 0x00F00000            // Mask for 1st arg typing
#define FF_0VOID 0x00000000            // Void (unknown)?
#define FF_0NUMH 0x00100000            // Hexadecimal number?
#define FF_0NUMD 0x00200000            // Decimal number?
#define FF_0CHAR 0x00300000            // Char ('x')?
#define FF_0SEG  0x00400000            // Segment?
#define FF_0OFF  0x00500000            // Offset?
#define FF_0NUMB 0x00600000            // Binary number?
#define FF_0NUMO 0x00700000            // Octal number?
#define FF_0ENUM 0x00800000            // Enumeration?
#define FF_0FOP  0x00900000            // Forced operand?
#define FF_0STRO 0x00A00000            // Struct offset?
#define FF_0STK  0x00B00000            // Stack variable?
#define FF_0FLT  0x00C00000            // Floating point number?
#define FF_0CUST 0x00D00000            // Custom format type?

#define MS_1TYPE 0x0F000000 // Mask for 2nd arg typing #define FF_1VOID 0x00000000 // Void (unknown)? #define FF_1NUMH 0x01000000 // Hexadecimal number? #define FF_1NUMD 0x02000000 // Decimal number? #define FF_1CHAR 0x03000000 // Char ('x')? #define FF_1SEG 0x04000000 // Segment? #define FF_1OFF 0x05000000 // Offset? #define FF_1NUMB 0x06000000 // Binary number? #define FF_1NUMO 0x07000000 // Octal number? #define FF_1ENUM 0x08000000 // Enumeration? #define FF_1FOP 0x09000000 // Forced operand? #define FF_1STRO 0x0A000000 // Struct offset? #define FF_1STK 0x0B000000 // Stack variable? #define FF_1FLT 0x0C000000 // Floating point number? #define FF_1CUST 0x0D000000 // Custom format type?

// The following macros answer questions like // 'is the 1st (or 2nd) operand of instruction or data of the given type'? // Please note that data items use only the 1st operand type (is...0)

#define is_defarg0(F) ((F & MS_0TYPE) != FF_0VOID) #define is_defarg1(F) ((F & MS_1TYPE) != FF_1VOID) #define is_dec0(F) ((F & MS_0TYPE) == FF_0NUMD) #define is_dec1(F) ((F & MS_1TYPE) == FF_1NUMD) #define is_hex0(F) ((F & MS_0TYPE) == FF_0NUMH) #define is_hex1(F) ((F & MS_1TYPE) == FF_1NUMH) #define is_oct0(F) ((F & MS_0TYPE) == FF_0NUMO) #define is_oct1(F) ((F & MS_1TYPE) == FF_1NUMO) #define is_bin0(F) ((F & MS_0TYPE) == FF_0NUMB) #define is_bin1(F) ((F & MS_1TYPE) == FF_1NUMB) #define is_off0(F) ((F & MS_0TYPE) == FF_0OFF) #define is_off1(F) ((F & MS_1TYPE) == FF_1OFF) #define is_char0(F) ((F & MS_0TYPE) == FF_0CHAR) #define is_char1(F) ((F & MS_1TYPE) == FF_1CHAR) #define is_seg0(F) ((F & MS_0TYPE) == FF_0SEG) #define is_seg1(F) ((F & MS_1TYPE) == FF_1SEG) #define is_enum0(F) ((F & MS_0TYPE) == FF_0ENUM) #define is_enum1(F) ((F & MS_1TYPE) == FF_1ENUM) #define is_manual0(F) ((F & MS_0TYPE) == FF_0FOP) #define is_manual1(F) ((F & MS_1TYPE) == FF_1FOP) #define is_stroff0(F) ((F & MS_0TYPE) == FF_0STRO) #define is_stroff1(F) ((F & MS_1TYPE) == FF_1STRO) #define is_stkvar0(F) ((F & MS_0TYPE) == FF_0STK) #define is_stkvar1(F) ((F & MS_1TYPE) == FF_1STK) #define is_float0(F) ((F & MS_0TYPE) == FF_0FLT) #define is_float1(F) ((F & MS_1TYPE) == FF_1FLT) #define is_custfmt0(F) ((F & MS_0TYPE) == FF_0CUST) #define is_custfmt1(F) ((F & MS_1TYPE) == FF_1CUST)

// // Bits for DATA bytes // #define DT_TYPE 0xF0000000 // Mask for DATA typing

#define FF_BYTE 0x00000000 // byte #define FF_WORD 0x10000000 // word #define FF_DWORD 0x20000000 // dword #define FF_QWORD 0x30000000 // qword #define FF_TBYTE 0x40000000 // tbyte #define FF_STRLIT 0x50000000 // ASCII ? #define FF_STRUCT 0x60000000 // Struct ? #define FF_OWORD 0x70000000 // octaword (16 bytes/128 bits) #define FF_FLOAT 0x80000000 // float #define FF_DOUBLE 0x90000000 // double #define FF_PACKREAL 0xA0000000 // packed decimal real #define FF_ALIGN 0xB0000000 // alignment directive #define FF_CUSTOM 0xD0000000 // custom data type #define FF_YWORD 0xE0000000 // ymm word (32 bytes/256 bits) #define FF_ZWORD 0xF0000000 // zmm word (64 bytes/512 bits)

#define is_byte(F) (is_data(F) && (F & DT_TYPE) == FF_BYTE) #define is_word(F) (is_data(F) && (F & DT_TYPE) == FF_WORD) #define is_dword(F) (is_data(F) && (F & DT_TYPE) == FF_DWORD) #define is_qword(F) (is_data(F) && (F & DT_TYPE) == FF_QWORD) #define is_oword(F) (is_data(F) && (F & DT_TYPE) == FF_OWORD) #define is_yword(F) (is_data(F) && (F & DT_TYPE) == FF_YWORD) #define is_tbyte(F) (is_data(F) && (F & DT_TYPE) == FF_TBYTE) #define is_float(F) (is_data(F) && (F & DT_TYPE) == FF_FLOAT) #define is_double(F) (is_data(F) && (F & DT_TYPE) == FF_DOUBLE) #define is_pack_real(F) (is_data(F) && (F & DT_TYPE) == FF_PACKREAL) #define is_strlit(F) (is_data(F) && (F & DT_TYPE) == FF_STRLIT) #define is_struct(F) (is_data(F) && (F & DT_TYPE) == FF_STRUCT) #define is_align(F) (is_data(F) && (F & DT_TYPE) == FF_ALIGN) #define is_custom(F) (is_data(F) && (F & DT_TYPE) == FF_CUSTOM)

// // Bits for CODE bytes //

#define MS_CODE 0xF0000000 #define FF_FUNC 0x10000000 // function start? #define FF_IMMD 0x40000000 // Has Immediate value ? #define FF_JUMP 0x80000000 // Has jump table

// // Loader flags //

#define NEF_SEGS 0x0001 // Create segments #define NEF_RSCS 0x0002 // Load resources #define NEF_NAME 0x0004 // Rename entries #define NEF_MAN 0x0008 // Manual load #define NEF_FILL 0x0010 // Fill segment gaps #define NEF_IMPS 0x0020 // Create imports section #define NEF_FIRST 0x0080 // This is the first file loaded #define NEF_CODE 0x0100 // for load_binary_file: #define NEF_RELOAD 0x0200 // reload the file at the same place: #define NEF_FLAT 0x0400 // Autocreated FLAT group (PE)

Index | Previous topic | Next topic