コード例 #1
0
/**
 * Gets the index into the context for the register
 *
 * @param reg the register
 *
 * @return the register index
 * @return -2 if the register is unknown
 * @return -1 if the register corresponds to a FP register
 */
static
int get_udi_reg_context_offset(udi_register_e reg) {
    switch (reg) {
        REG_CASE(X86_GS);
        REG_CASE(X86_FS);
        REG_CASE(X86_ES);
        REG_CASE(X86_DS);
        REG_CASE(X86_EDI);
        REG_CASE(X86_ESI);
        REG_CASE(X86_EBP);
        REG_CASE(X86_ESP);
        REG_CASE(X86_EBX);
        REG_CASE(X86_EDX);
        REG_CASE(X86_ECX);
        REG_CASE(X86_EAX);
        REG_CASE(X86_CS);
        REG_CASE(X86_SS);
        REG_CASE(X86_EIP);
        REG_CASE(X86_FLAGS);
        REG_CASE(X86_64_R8);
        REG_CASE(X86_64_R9);
        REG_CASE(X86_64_R10);
        REG_CASE(X86_64_R11);
        REG_CASE(X86_64_R12);
        REG_CASE(X86_64_R13);
        REG_CASE(X86_64_R14);
        REG_CASE(X86_64_R15);
        REG_CASE(X86_64_RDI);
        REG_CASE(X86_64_RSI);
        REG_CASE(X86_64_RBP);
        REG_CASE(X86_64_RBX);
        REG_CASE(X86_64_RDX);
        REG_CASE(X86_64_RAX);
        REG_CASE(X86_64_RCX);
        REG_CASE(X86_64_RSP);
        REG_CASE(X86_64_RIP);
        REG_CASE(X86_64_CSGSFS);
        REG_CASE(X86_64_FLAGS);
        case UDI_X86_ST0:
        case UDI_X86_ST1:
        case UDI_X86_ST2:
        case UDI_X86_ST3:
        case UDI_X86_ST4:
        case UDI_X86_ST5:
        case UDI_X86_ST6:
        case UDI_X86_ST7:
        case UDI_X86_64_ST0:
        case UDI_X86_64_ST1:
        case UDI_X86_64_ST2:
        case UDI_X86_64_ST3:
        case UDI_X86_64_ST4:
        case UDI_X86_64_ST5:
        case UDI_X86_64_ST6:
        case UDI_X86_64_ST7:
        case UDI_X86_64_XMM0:
        case UDI_X86_64_XMM1:
        case UDI_X86_64_XMM2:
        case UDI_X86_64_XMM3:
        case UDI_X86_64_XMM4:
        case UDI_X86_64_XMM5:
        case UDI_X86_64_XMM6:
        case UDI_X86_64_XMM7:
        case UDI_X86_64_XMM8:
        case UDI_X86_64_XMM9:
        case UDI_X86_64_XMM10:
        case UDI_X86_64_XMM11:
        case UDI_X86_64_XMM12:
        case UDI_X86_64_XMM13:
        case UDI_X86_64_XMM14:
        case UDI_X86_64_XMM15:
            return -1;
        default:
            return -2;
    }
}
コード例 #2
0
ファイル: UDIS86.hpp プロジェクト: kevinmel2000/fail
	/**
	 * Returns the FailBochs equivalent to a UDIS86 GPR identifier.
	 * Attention: this only returns either 32-bit or 64-bit registers, no general IDs
	 * @param udisReg the udis86 GPR ID
	 * @returns the FailBochs GPR ID, usable with the BochsRegisterManager class
	 */
	static inline fail::GPRegisterId udisGPRToFailBochsGPR(ud_type_t udisReg)
	{
		#define REG_CASE(REG) case UD_R_##REG: return fail::RID_##REG
			switch (udisReg) {
		#if BX_SUPPORT_X86_64 // 64 bit register id's:
			REG_CASE(RAX);
			REG_CASE(RCX);
			REG_CASE(RDX);
			REG_CASE(RBX);
			REG_CASE(RSP);
			REG_CASE(RBP);
			REG_CASE(RSI);
			REG_CASE(RDI);
			REG_CASE(R8);
			REG_CASE(R9);
			REG_CASE(R10);
			REG_CASE(R11);
			REG_CASE(R12);
			REG_CASE(R13);
			REG_CASE(R14);
			REG_CASE(R15);
		#else
			REG_CASE(EAX);
			REG_CASE(ECX);
			REG_CASE(EDX);
			REG_CASE(EBX);
			REG_CASE(ESP);
			REG_CASE(EBP);
			REG_CASE(ESI);
			REG_CASE(EDI);
		#endif
			default:
				return fail::RID_LAST_GP_ID;
			}
		#undef REG_CASE
	}