• Unfortunately, we have experienced significant hard drive damage that requires urgent maintenance and rebuilding. The forum will be a state of read only until we install our new drives and rebuild all the configurations needed. Please follow our Facebook page for updates, we will be back up shortly! (The forum could go offline at any given time due to the nature of the failed drives whilst awaiting the upgrades.) When you see an Incapsula error, you know we are in the process of migration.

[c++] Compile Problems

The beer?? Its here !!!
Loyal Member
Joined
Jan 9, 2007
Messages
1,621
Reaction score
104
Hi,

I got an problem with compiling an source code.
This is an piece of the code.
Code:
DETOUR/CDetour.cpp 

//////////////////////////////////////////////////////////////////////////////
//
//    Module:        detours.lib
//  File:        disasm.cpp
//
//    Detours for binary functions.  Version 1.5 (Build 46)
//  Includes support for all x86 chips prior to the Pentium III.
//
//    Copyright 1999-2001, Microsoft Corporation
//

#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN

#include <windows.h>
//#include <imagehlp.h>
//#include "detours.h"
//#include "disasm.h"

#include "CDetourDis.h"

#undef ASSERT
#define ASSERT(x)

//////////////////////////////////////////////////////////////////////////////
//
//  Function:
//      DetourCopyInstruction(PBYTE pbDst, PBYTE pbSrc, PBYTE* ppbTarget)
//  Purpose:
//      Copy a single instruction from pbSrc to pbDst.
//  Arguments:
//      pbDst:
//          Destination address for the instruction.  May be NULL in which
//          case DetourCopyInstruction is used to measure an instruction.
//          If not NULL then the source instruction is copied to the
//          destination instruction and any relative arguments are adjusted.
//      pbSrc:
//          Source address of the instruction.
//      ppbTarget:
//          Out parameter for any target instruction address pointed to by
//          the instruction.  For example, a branch or a jump insruction has
//          a target, but a load or store instruction doesn't.  A target is
//          another instruction that may be executed as a result of this
//          instruction.  ppbTarget may be NULL.
//        plExtra:
//            Out parameter for the number of extra bytes needed by the
//            instruction to reach the target.  For example, lExtra = 3 if the
//            instruction had an 8-bit relative offset, but needs a 32-bit
//            relative offset.
//  Returns:
//      Returns the address of the next instruction (following in the source)
//      instruction.  By subtracting pbSrc from the return value, the caller
//      can determinte the size of the instruction copied.
//  Comments:
//      By following the pbTarget, the caller can follow alternate
//      instruction streams.  However, it is not always possible to determine
//      the target based on static analysis.  For example, the destination of
//      a jump relative to a register cannot be determined from just the
//      instruction stream.  The output value, pbTarget, can have any of the
//      following outputs:
//            DETOUR_INSTRUCTION_TARGET_NONE:
//              The instruction has no targets.
//            DETOUR_INSTRUCTION_TARGET_DYNAMIC:
//              The instruction has a non-deterministic (dynamic) target.
//                (i.e. the jump is to an address held in a register.)
//          Address:   The instruction has the specified target.
//
//      When copying instructions, DetourCopyInstruction insures that any
//      targets remain constant.  It does so by adjusting any IP relative
//      offsets.
//

PBYTE WINAPI DetourCopyInstructionEx(PBYTE pbDst, PBYTE pbSrc, PBYTE* ppbTarget, LONG* plExtra){
    CDetourDis oDetourDisasm(ppbTarget, plExtra);
    
    return oDetourDisasm.CopyInstruction(pbDst, pbSrc);
}

PBYTE WINAPI DetourCopyInstruction(PBYTE pbDst, PBYTE pbSrc, PBYTE* ppbTarget){
    CDetourDis oDetourDisasm(ppbTarget, NULL);

    return oDetourDisasm.CopyInstruction(pbDst, pbSrc);
}

/////////////////////////////////////////////////////////// Disassembler Code.

CDetourDis::CDetourDis(PBYTE* ppbTarget, LONG* plExtra){
    Set32BitOperand();
    Set32BitAddress();

    m_ppbTarget = ppbTarget ? ppbTarget : &m_pbScratchTarget;
    m_plExtra = plExtra ? plExtra : &m_lScratchExtra;

    *m_ppbTarget = DETOUR_INSTRUCTION_TARGET_NONE;
    *m_plExtra = 0;

    m_pbDstOverride = 0;
    m_bAdjustZero = FALSE;
}

VOID CDetourDis::Set16BitOperand(){
    m_b16BitOperand = TRUE;
}

VOID CDetourDis::Set32BitOperand(){
    m_b16BitOperand = FALSE;
}

VOID CDetourDis::Set16BitAddress(){
    m_b16BitAddress = TRUE;
}

VOID CDetourDis::Set32BitAddress(){
    m_b16BitAddress = FALSE;
}

PBYTE CDetourDis::CopyInstruction(PBYTE pbDst, PBYTE pbSrc){
    // Configure scratch areas if real areas are not available.
    if(NULL == pbDst)
        pbDst = m_rbScratchDst;

    if(NULL == pbSrc){
        // We can't copy a non-existent instruction.
        SetLastError(ERROR_INVALID_DATA);
        
        return NULL;
    }
    
    // Figure out how big the instruction is, do the appropriate copy,
    // and figure out what the target of the instruction is if any.
    REFCOPYENTRY pEntry = &s_rceCopyTable[pbSrc[0]];
    
    return (this->*pEntry->pfCopy)(pEntry, pbDst, pbSrc);
}

PBYTE CDetourDis::CopyInstructionEx(PBYTE pbDst, PBYTE pbSrc, PBYTE pbDstOverride){
    m_pbDstOverride = pbDstOverride;

    PBYTE pbRet = CopyInstruction(pbDst, pbSrc);

    m_pbDstOverride = NULL;

    return pbRet;
}

PBYTE CDetourDis::CopyInstructionZero(PBYTE pbDst, PBYTE pbSrc){
    m_bAdjustZero = TRUE;

    PBYTE pbRet = CopyInstructionEx(pbDst, pbSrc, NULL);

    m_bAdjustZero = FALSE;

    return pbRet;
}

BYTE CDetourDis::InstructionLen(PBYTE pbSrc){
    PBYTE pbDst = m_rbScratchDst;

    if(NULL == pbSrc){
        // We can't copy a non-existent instruction.
        SetLastError(ERROR_INVALID_DATA);
        
        return NULL;
    }
    
    // Figure out how big the instruction is, do the appropriate copy,
    // and figure out what the target of the instruction is if any.
    REFCOPYENTRY pEntry = &s_rceCopyTable[pbSrc[0]];
    
    PBYTE pbEnd = (this->*pEntry->pfCopy)(pEntry, pbDst, pbSrc);

    if(!pbEnd)
        return 0;

    return (BYTE)(pbEnd - pbSrc);
}

PBYTE CDetourDis::CopyBytes(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    LONG nBytesFixed = (pEntry->nFlagBits & ADDRESS) ? (m_b16BitAddress ? pEntry->nFixedSize16 : pEntry->nFixedSize) : (m_b16BitOperand ? pEntry->nFixedSize16 : pEntry->nFixedSize);
    LONG nBytes = nBytesFixed;
    
    BYTE bAddrOfs = 0;
    
    if(pEntry->nModOffset > 0){
        BYTE bModRm = pbSrc[pEntry->nModOffset];
        BYTE bFlags = s_rbModRm[bModRm];

        if((bFlags & NOENLARGE) && ((bFlags & NOTSIB) == 4))
            bAddrOfs = (BYTE)pEntry->nModOffset + 1;
        
        if(bFlags & SIB){
            BYTE bSib = pbSrc[pEntry->nModOffset + 1];
            
            if((bSib & 0x07) == 0x05){
                if((bModRm & 0xc0) == 0x00)
                    nBytes += 4;
                else if((bModRm & 0xc0) == 0x40)
                    nBytes += 1;
                else if ((bModRm & 0xc0) == 0x80)
                    nBytes += 4;
            }
        }

        nBytes += bFlags & NOTSIB;
    }

    CopyMemory(pbDst, pbSrc, nBytes);

    if(m_bAdjustZero && bAddrOfs)
        *(DWORD*)&pbDst[bAddrOfs] = 0;

    if(pEntry->nRelOffset)
        *m_ppbTarget = AdjustTarget(pbDst, pbSrc, nBytesFixed, pEntry->nRelOffset);
    
    if(pEntry->nFlagBits & NOENLARGE)
        *m_plExtra = -*m_plExtra;
    
    if(pEntry->nFlagBits & DYNAMIC)
        *m_ppbTarget = DETOUR_INSTRUCTION_TARGET_DYNAMIC;

    return pbSrc + nBytes;
}

PBYTE CDetourDis::CopyBytesPrefix(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    CopyBytes(pEntry, pbDst, pbSrc);
    
    pEntry = &s_rceCopyTable[pbSrc[1]];
    
    return (this->*pEntry->pfCopy)(pEntry, pbDst + 1, pbSrc + 1);
}

PBYTE CDetourDis::AdjustTarget(PBYTE pbDst, PBYTE pbSrc, LONG cbOp, LONG cbTargetOffset){
    LONG cbTargetSize = cbOp - cbTargetOffset;
    PBYTE pbTarget = NULL;
    PVOID pvTargetAddr = &pbDst[cbTargetOffset];
    LONG nOldOffset = 0;
    
    switch(cbTargetSize){
    case 1:
        nOldOffset = (LONG)*(PCHAR&)pvTargetAddr;
        *m_plExtra = 3;
        
        break;
    
    case 2:
        nOldOffset = (LONG)*(PSHORT&)pvTargetAddr;
        *m_plExtra = 2;
        
        break;
    
    case 4:
        nOldOffset = (LONG)*(PLONG&)pvTargetAddr;
        *m_plExtra = 0;
        
        break;
    
    default:
        ASSERT(!"cbTargetSize is invalid.");
        
        break;
    }
    
    pbTarget = pbSrc + cbOp + nOldOffset;
    LONG nNewOffset = nOldOffset - (((m_pbDstOverride != NULL) ? m_pbDstOverride : pbDst) - pbSrc);
    
    switch (cbTargetSize) {
    case 1:
        *(PCHAR&)pvTargetAddr = (CHAR)nNewOffset;
        
        break;
    
    case 2:
        *(PSHORT&)pvTargetAddr = (SHORT)nNewOffset;
        
        break;
    
    case 4:
        *(PLONG&)pvTargetAddr = (LONG)nNewOffset;
        
        break;
    }
    
    ASSERT(pbDst + cbOp + nNewOffset == pbTarget);
    
    return pbTarget;
}

PBYTE CDetourDis::Invalid(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    (void)pbDst;
    (void)pEntry;
    
    ASSERT(!"Invalid Instruction");
    
    return pbSrc + 1;
}

////////////////////////////////////////////////////// Individual Bytes Codes.

PBYTE CDetourDis::Copy0F(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    CopyBytes(pEntry, pbDst, pbSrc);
    
    pEntry = &s_rceCopyTable0F[pbSrc[1]];
    
    return (this->*pEntry->pfCopy)(pEntry, pbDst + 1, pbSrc + 1);
}

PBYTE CDetourDis::Copy66(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    // Operand-size override prefix
    Set16BitOperand();
    
    return CopyBytesPrefix(pEntry, pbDst, pbSrc);
}

PBYTE CDetourDis::Copy67(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    // Address size override prefix
    Set16BitAddress();
    
    return CopyBytesPrefix(pEntry, pbDst, pbSrc);
}

PBYTE CDetourDis::CopyF6(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    (void)pEntry;
    
    // TEST BYTE /0
    if(0x00 == (0x38 & pbSrc[1])){    // reg(bits 543) of ModR/M == 0
        const COPYENTRY ce = { 0xf6, ENTRY_CopyBytes2Mod1 };
        
        return (this->*ce.pfCopy)(&ce, pbDst, pbSrc);
    }

    // DIV /6
    // IDIV /7
    // IMUL /5
    // MUL /4
    // NEG /3
    // NOT /2
    
    const COPYENTRY ce = { 0xf6, ENTRY_CopyBytes2Mod };
    
    return (this->*ce.pfCopy)(&ce, pbDst, pbSrc);
}

PBYTE CDetourDis::CopyF7(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    (void)pEntry;
    
    // TEST WORD /0
    if(0x00 == (0x38 & pbSrc[1])){    // reg(bits 543) of ModR/M == 0
        const COPYENTRY ce = {0xf7, ENTRY_CopyBytes2ModOperand};
        
        return (this->*ce.pfCopy)(&ce, pbDst, pbSrc);
    }
    
    // DIV /6
    // IDIV /7
    // IMUL /5
    // MUL /4
    // NEG /3
    // NOT /2
    
    const COPYENTRY ce = { 0xf7, ENTRY_CopyBytes2Mod };
    
    return (this->*ce.pfCopy)(&ce, pbDst, pbSrc);
}

PBYTE CDetourDis::CopyFF(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc){
    // CALL /2
    // CALL /3
    // INC /0
    // JMP /4
    // JMP /5
    // PUSH /6
    (void)pEntry;
    
    if(0x15 == pbSrc[1] || 0x25 == pbSrc[1]){            // CALL [], JMP []
        PBYTE* ppbTarget = *(PBYTE**)&pbSrc[2];
        
        *m_ppbTarget = *ppbTarget;
    
    }else if(0x10 == (0x38 & pbSrc[1]) || // CALL /2 --> reg(bits 543) of ModR/M == 010
             0x18 == (0x38 & pbSrc[1]) || // CALL /3 --> reg(bits 543) of ModR/M == 011
             0x20 == (0x38 & pbSrc[1]) || // JMP /4 --> reg(bits 543) of ModR/M == 100
             0x28 == (0x38 & pbSrc[1])    // JMP /5 --> reg(bits 543) of ModR/M == 101
             ){
        
        *m_ppbTarget = DETOUR_INSTRUCTION_TARGET_DYNAMIC;
    }
    
    const COPYENTRY ce = { 0xff, ENTRY_CopyBytes2Mod };
    
    return (this->*ce.pfCopy)(&ce, pbDst, pbSrc);
}

///////////////////////////////////////////////////////// Disassembler Tables.

const BYTE CDetourDis::s_rbModRm[256] = {
    0,0,0,0, SIB|1,4,0,0, 0,0,0,0, SIB|1,4,0,0,            // 0x
    0,0,0,0, SIB|1,4,0,0, 0,0,0,0, SIB|1,4,0,0,            // 1x
    0,0,0,0, SIB|1,4,0,0, 0,0,0,0, SIB|1,4,0,0,            // 2x
    0,0,0,0, SIB|1,4,0,0, 0,0,0,0, SIB|1,4,0,0,            // 3x
    1,1,1,1, 2,1,1,1, 1,1,1,1, 2,1,1,1,                    // 4x
    1,1,1,1, 2,1,1,1, 1,1,1,1, 2,1,1,1,                    // 5x
    1,1,1,1, 2,1,1,1, 1,1,1,1, 2,1,1,1,                    // 6x
    1,1,1,1, 2,1,1,1, 1,1,1,1, 2,1,1,1,                    // 7x
    4,4,4,4, 5,4,4,4, 4,4,4,4, 5,4,4,4,                    // 8x
    4,4,4,4, 5,4,4,4, 4,4,4,4, 5,4,4,4,                    // 9x
    4,4,4,4, 5,4,4,4, 4,4,4,4, 5,4,4,4,                    // Ax
    4,4,4,4, 5,4,4,4, 4,4,4,4, 5,4,4,4,                    // Bx
    0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,                    // Cx
    0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,                    // Dx
    0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,                    // Ex
    0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0                    // Fx
};

const CDetourDis::COPYENTRY CDetourDis::s_rceCopyTable[257] = { 
    { 0x00, ENTRY_CopyBytes2Mod },                        // ADD /r
    { 0x01, ENTRY_CopyBytes2Mod },                        // ADD /r
    { 0x02, ENTRY_CopyBytes2Mod },                        // ADD /r
    { 0x03, ENTRY_CopyBytes2Mod },                        // ADD /r
    { 0x04, ENTRY_CopyBytes2 },                            // ADD ib
    { 0x05, ENTRY_CopyBytes3Or5 },                        // ADD iw
    { 0x06, ENTRY_CopyBytes1 },                            // PUSH
    { 0x07, ENTRY_CopyBytes1 },                            // POP
    { 0x08, ENTRY_CopyBytes2Mod },                        // OR /r
    { 0x09, ENTRY_CopyBytes2Mod },                        // OR /r
    { 0x0A, ENTRY_CopyBytes2Mod },                        // OR /r
    { 0x0B, ENTRY_CopyBytes2Mod },                        // OR /r
    { 0x0C, ENTRY_CopyBytes2 },                            // OR ib
    { 0x0D, ENTRY_CopyBytes3Or5 },                        // OR iw
    { 0x0E, ENTRY_CopyBytes1 },                            // PUSH
    { 0x0F, ENTRY_Copy0F },                                // Extension Ops 
    { 0x10, ENTRY_CopyBytes2Mod },                        // ADC /r
    { 0x11, ENTRY_CopyBytes2Mod },                        // ADC /r
    { 0x12, ENTRY_CopyBytes2Mod },                        // ADC /r
    { 0x13, ENTRY_CopyBytes2Mod },                        // ADC /r
    { 0x14, ENTRY_CopyBytes2 },                            // ADC ib
    { 0x15, ENTRY_CopyBytes3Or5 },                        // ADC id
    { 0x16, ENTRY_CopyBytes1 },                            // PUSH
    { 0x17, ENTRY_CopyBytes1 },                            // POP
    { 0x18, ENTRY_CopyBytes2Mod },                        // SBB /r
    { 0x19, ENTRY_CopyBytes2Mod },                        // SBB /r
    { 0x1A, ENTRY_CopyBytes2Mod },                        // SBB /r
    { 0x1B, ENTRY_CopyBytes2Mod },                        // SBB /r
    { 0x1C, ENTRY_CopyBytes2 },                            // SBB ib
    { 0x1D, ENTRY_CopyBytes3Or5 },                        // SBB id
    { 0x1E, ENTRY_CopyBytes1 },                            // PUSH
    { 0x1F, ENTRY_CopyBytes1 },                            // POP
    { 0x20, ENTRY_CopyBytes2Mod },                        // AND /r
    { 0x21, ENTRY_CopyBytes2Mod },                        // AND /r
    { 0x22, ENTRY_CopyBytes2Mod },                        // AND /r
    { 0x23, ENTRY_CopyBytes2Mod },                        // AND /r
    { 0x24, ENTRY_CopyBytes2 },                            // AND ib
    { 0x25, ENTRY_CopyBytes3Or5 },                        // AND id
    { 0x26, ENTRY_CopyBytesPrefix },                    // ES prefix 
    { 0x27, ENTRY_CopyBytes1 },                            // DAA
    { 0x28, ENTRY_CopyBytes2Mod },                        // SUB /r
    { 0x29, ENTRY_CopyBytes2Mod },                        // SUB /r
    { 0x2A, ENTRY_CopyBytes2Mod },                        // SUB /r
    { 0x2B, ENTRY_CopyBytes2Mod },                        // SUB /r
    { 0x2C, ENTRY_CopyBytes2 },                            // SUB ib
    { 0x2D, ENTRY_CopyBytes3Or5 },                        // SUB id
    { 0x2E, ENTRY_CopyBytesPrefix },                    // CS prefix 
    { 0x2F, ENTRY_CopyBytes1 },                            // DAS
    { 0x30, ENTRY_CopyBytes2Mod },                        // XOR /r
    { 0x31, ENTRY_CopyBytes2Mod },                        // XOR /r
    { 0x32, ENTRY_CopyBytes2Mod },                        // XOR /r
    { 0x33, ENTRY_CopyBytes2Mod },                        // XOR /r
    { 0x34, ENTRY_CopyBytes2 },                            // XOR ib
    { 0x35, ENTRY_CopyBytes3Or5 },                        // XOR id
    { 0x36, ENTRY_CopyBytesPrefix },                    // SS prefix 
    { 0x37, ENTRY_CopyBytes1 },                            // AAA
    { 0x38, ENTRY_CopyBytes2Mod },                        // CMP /r
    { 0x39, ENTRY_CopyBytes2Mod },                        // CMP /r
    { 0x3A, ENTRY_CopyBytes2Mod },                        // CMP /r
    { 0x3B, ENTRY_CopyBytes2Mod },                        // CMP /r
    { 0x3C, ENTRY_CopyBytes2 },                            // CMP ib
    { 0x3D, ENTRY_CopyBytes3Or5 },                        // CMP id
    { 0x3E, ENTRY_CopyBytesPrefix },                    // DS prefix 
    { 0x3F, ENTRY_CopyBytes1 },                            // AAS
    { 0x40, ENTRY_CopyBytes1 },                            // INC
    { 0x41, ENTRY_CopyBytes1 },                            // INC
    { 0x42, ENTRY_CopyBytes1 },                            // INC
    { 0x43, ENTRY_CopyBytes1 },                            // INC
    { 0x44, ENTRY_CopyBytes1 },                            // INC
    { 0x45, ENTRY_CopyBytes1 },                            // INC
    { 0x46, ENTRY_CopyBytes1 },                            // INC
    { 0x47, ENTRY_CopyBytes1 },                            // INC
    { 0x48, ENTRY_CopyBytes1 },                            // DEC
    { 0x49, ENTRY_CopyBytes1 },                            // DEC
    { 0x4A, ENTRY_CopyBytes1 },                            // DEC
    { 0x4B, ENTRY_CopyBytes1 },                            // DEC
    { 0x4C, ENTRY_CopyBytes1 },                            // DEC
    { 0x4D, ENTRY_CopyBytes1 },                            // DEC
    { 0x4E, ENTRY_CopyBytes1 },                            // DEC
    { 0x4F, ENTRY_CopyBytes1 },                            // DEC
    { 0x50, ENTRY_CopyBytes1 },                            // PUSH
    { 0x51, ENTRY_CopyBytes1 },                            // PUSH
    { 0x52, ENTRY_CopyBytes1 },                            // PUSH
    { 0x53, ENTRY_CopyBytes1 },                            // PUSH
    { 0x54, ENTRY_CopyBytes1 },                            // PUSH
    { 0x55, ENTRY_CopyBytes1 },                            // PUSH
    { 0x56, ENTRY_CopyBytes1 },                            // PUSH
    { 0x57, ENTRY_CopyBytes1 },                            // PUSH
    { 0x58, ENTRY_CopyBytes1 },                            // POP
    { 0x59, ENTRY_CopyBytes1 },                            // POP
    { 0x5A, ENTRY_CopyBytes1 },                            // POP
    { 0x5B, ENTRY_CopyBytes1 },                            // POP
    { 0x5C, ENTRY_CopyBytes1 },                            // POP
    { 0x5D, ENTRY_CopyBytes1 },                            // POP
    { 0x5E, ENTRY_CopyBytes1 },                            // POP
    { 0x5F, ENTRY_CopyBytes1 },                            // POP
    { 0x60, ENTRY_CopyBytes1 },                            // PUSHAD
    { 0x61, ENTRY_CopyBytes1 },                            // POPAD
    { 0x62, ENTRY_CopyBytes2Mod },                        // BOUND /r
    { 0x63, ENTRY_CopyBytes2Mod },                        // ARPL /r
    { 0x64, ENTRY_CopyBytesPrefix },                    // FS prefix 
    { 0x65, ENTRY_CopyBytesPrefix },                    // GS prefix 
    { 0x66, ENTRY_Copy66 },                                // Operand Prefix 
    { 0x67, ENTRY_Copy67 },                                // Address Prefix 
    { 0x68, ENTRY_CopyBytes3Or5 },                        // PUSH
    { 0x69, ENTRY_CopyBytes2ModOperand },                // 
    { 0x6A, ENTRY_CopyBytes2 },                            // PUSH
    { 0x6B, ENTRY_CopyBytes2Mod1 },                        // IMUL /r ib 
    { 0x6C, ENTRY_CopyBytes1 },                            // INS
    { 0x6D, ENTRY_CopyBytes1 },                            // INS
    { 0x6E, ENTRY_CopyBytes1 },                            // OUTS/OUTSB
    { 0x6F, ENTRY_CopyBytes1 },                            // OUTS/OUTSW
    { 0x70, ENTRY_CopyBytes2Jump },                        // JO
    { 0x71, ENTRY_CopyBytes2Jump },                        // JNO
    { 0x72, ENTRY_CopyBytes2Jump },                        // JB/JC/JNAE
    { 0x73, ENTRY_CopyBytes2Jump },                        // JAE/JNB/JNC
    { 0x74, ENTRY_CopyBytes2Jump },                        // JE/JZ
    { 0x75, ENTRY_CopyBytes2Jump },                        // JNE/JNZ
    { 0x76, ENTRY_CopyBytes2Jump },                        // JBE/JNA
    { 0x77, ENTRY_CopyBytes2Jump },                        // JA/JNBE
    { 0x78, ENTRY_CopyBytes2Jump },                        // JS
    { 0x79, ENTRY_CopyBytes2Jump },                        // JNS
    { 0x7A, ENTRY_CopyBytes2Jump },                        // JP/JPE
    { 0x7B, ENTRY_CopyBytes2Jump },                        // JNP/JPO
    { 0x7C, ENTRY_CopyBytes2Jump },                        // JL/JNGE
    { 0x7D, ENTRY_CopyBytes2Jump },                        // JGE/JNL
    { 0x7E, ENTRY_CopyBytes2Jump },                        // JLE/JNG
    { 0x7F, ENTRY_CopyBytes2Jump },                        // JG/JNLE
    { 0x80, ENTRY_CopyBytes2Mod1 },                        // ADC/2 ib, etc.s 
    { 0x81, ENTRY_CopyBytes2ModOperand },                // 
    { 0x82, ENTRY_CopyBytes2 },                            // MOV al,x
    { 0x83, ENTRY_CopyBytes2Mod1 },                        // ADC/2 ib, etc. 
    { 0x84, ENTRY_CopyBytes2Mod },                        // TEST /r
    { 0x85, ENTRY_CopyBytes2Mod },                        // TEST /r
    { 0x86, ENTRY_CopyBytes2Mod },                        // XCHG /r @todo 
    { 0x87, ENTRY_CopyBytes2Mod },                        // XCHG /r @todo 
    { 0x88, ENTRY_CopyBytes2Mod },                        // MOV /r
    { 0x89, ENTRY_CopyBytes2Mod },                        // MOV /r
    { 0x8A, ENTRY_CopyBytes2Mod },                        // MOV /r
    { 0x8B, ENTRY_CopyBytes2Mod },                        // MOV /r
    { 0x8C, ENTRY_CopyBytes2Mod },                        // MOV /r
    { 0x8D, ENTRY_CopyBytes2Mod },                        // LEA /r
    { 0x8E, ENTRY_CopyBytes2Mod },                        // MOV /r
    { 0x8F, ENTRY_CopyBytes2Mod },                        // POP /0
    { 0x90, ENTRY_CopyBytes1 },                            // NOP
    { 0x91, ENTRY_CopyBytes1 },                            // XCHG
    { 0x92, ENTRY_CopyBytes1 },                            // XCHG
    { 0x93, ENTRY_CopyBytes1 },                            // XCHG
    { 0x94, ENTRY_CopyBytes1 },                            // XCHG
    { 0x95, ENTRY_CopyBytes1 },                            // XCHG
    { 0x96, ENTRY_CopyBytes1 },                            // XCHG
    { 0x97, ENTRY_CopyBytes1 },                            // XCHG
    { 0x98, ENTRY_CopyBytes1 },                            // CWDE
    { 0x99, ENTRY_CopyBytes1 },                            // CDQ
    { 0x9A, ENTRY_CopyBytes5Or7Dynamic },                // CALL cp 
    { 0x9B, ENTRY_CopyBytes1 },                            // WAIT/FWAIT
    { 0x9C, ENTRY_CopyBytes1 },                            // PUSHFD
    { 0x9D, ENTRY_CopyBytes1 },                            // POPFD
    { 0x9E, ENTRY_CopyBytes1 },                            // SAHF
    { 0x9F, ENTRY_CopyBytes1 },                            // LAHF
    { 0xA0, ENTRY_CopyBytes3Or5Address },                // MOV
    { 0xA1, ENTRY_CopyBytes3Or5Address },                // MOV
    { 0xA2, ENTRY_CopyBytes3Or5Address },                // MOV
    { 0xA3, ENTRY_CopyBytes3Or5Address },                // MOV
    { 0xA4, ENTRY_CopyBytes1 },                            // MOVS
    { 0xA5, ENTRY_CopyBytes1 },                            // MOVS/MOVSD
    { 0xA6, ENTRY_CopyBytes1 },                            // CMPS/CMPSB
    { 0xA7, ENTRY_CopyBytes1 },                            // CMPS/CMPSW
    { 0xA8, ENTRY_CopyBytes2 },                            // TEST
    { 0xA9, ENTRY_CopyBytes3Or5 },                        // TEST
    { 0xAA, ENTRY_CopyBytes1 },                            // STOS/STOSB
    { 0xAB, ENTRY_CopyBytes1 },                            // STOS/STOSW
    { 0xAC, ENTRY_CopyBytes1 },                            // LODS/LODSB
    { 0xAD, ENTRY_CopyBytes1 },                            // LODS/LODSW
    { 0xAE, ENTRY_CopyBytes1 },                            // SCAS/SCASB
    { 0xAF, ENTRY_CopyBytes1 },                            // SCAS/SCASD
    { 0xB0, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB1, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB2, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB3, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB4, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB5, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB6, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB7, ENTRY_CopyBytes2 },                            // MOV B0+rb
    { 0xB8, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xB9, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xBA, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xBB, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xBC, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xBD, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xBE, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xBF, ENTRY_CopyBytes3Or5 },                        // MOV B8+rb
    { 0xC0, ENTRY_CopyBytes2Mod1 },                        // RCL/2 ib, etc. 
    { 0xC1, ENTRY_CopyBytes2Mod1 },                        // RCL/2 ib, etc. 
    { 0xC2, ENTRY_CopyBytes3 },                            // RET
    { 0xC3, ENTRY_CopyBytes1 },                            // RET
    { 0xC4, ENTRY_CopyBytes2Mod },                        // LES
    { 0xC5, ENTRY_CopyBytes2Mod },                        // LDS
    { 0xC6, ENTRY_CopyBytes2Mod1 },                        // MOV 
    { 0xC7, ENTRY_CopyBytes2ModOperand },                // MOV
    { 0xC8, ENTRY_CopyBytes4 },                            // ENTER
    { 0xC9, ENTRY_CopyBytes1 },                            // LEAVE
    { 0xCA, ENTRY_CopyBytes3Dynamic },                    // RET
    { 0xCB, ENTRY_CopyBytes1Dynamic },                    // RET
    { 0xCC, ENTRY_CopyBytes1Dynamic },                    // INT 3
    { 0xCD, ENTRY_CopyBytes2Dynamic },                    // INT ib
    { 0xCE, ENTRY_CopyBytes1Dynamic },                    // INTO
    { 0xCF, ENTRY_CopyBytes1Dynamic },                    // IRET
    { 0xD0, ENTRY_CopyBytes2Mod },                        // RCL/2, etc.
    { 0xD1, ENTRY_CopyBytes2Mod },                        // RCL/2, etc.
    { 0xD2, ENTRY_CopyBytes2Mod },                        // RCL/2, etc.
    { 0xD3, ENTRY_CopyBytes2Mod },                        // RCL/2, etc.
    { 0xD4, ENTRY_CopyBytes2 },                            // AAM
    { 0xD5, ENTRY_CopyBytes2 },                            // AAD
    { 0xD6, ENTRY_Invalid },                            // 
    { 0xD7, ENTRY_CopyBytes1 },                            // XLAT/XLATB
    { 0xD8, ENTRY_CopyBytes2Mod },                        // FADD, etc. 
    { 0xD9, ENTRY_CopyBytes2Mod },                        // F2XM1, etc.
    { 0xDA, ENTRY_CopyBytes2Mod },                        // FLADD, etc. 
    { 0xDB, ENTRY_CopyBytes2Mod },                        // FCLEX, etc. 
    { 0xDC, ENTRY_CopyBytes2Mod },                        // FADD/0, etc. 
    { 0xDD, ENTRY_CopyBytes2Mod },                        // FFREE, etc. 
    { 0xDE, ENTRY_CopyBytes2Mod },                        // FADDP, etc. 
    { 0xDF, ENTRY_CopyBytes2Mod },                        // FBLD/4, etc. 
    { 0xE0, ENTRY_CopyBytes2CantJump },                    // LOOPNE cb
    { 0xE1, ENTRY_CopyBytes2CantJump },                    // LOOPE cb
    { 0xE2, ENTRY_CopyBytes2CantJump },                    // LOOP cb
    { 0xE3, ENTRY_CopyBytes2Jump },                        // JCXZ/JECXZ
    { 0xE4, ENTRY_CopyBytes2 },                            // IN ib
    { 0xE5, ENTRY_CopyBytes2 },                            // IN id
    { 0xE6, ENTRY_CopyBytes2 },                            // OUT ib
    { 0xE7, ENTRY_CopyBytes2 },                            // OUT ib
    { 0xE8, ENTRY_CopyBytes3Or5Target },                // CALL cd
    { 0xE9, ENTRY_CopyBytes3Or5Target },                // JMP cd
    { 0xEA, ENTRY_CopyBytes5Or7Dynamic },                // JMP cp
    { 0xEB, ENTRY_CopyBytes2Jump },                        // JMP cb
    { 0xEC, ENTRY_CopyBytes1 },                            // IN ib
    { 0xED, ENTRY_CopyBytes1 },                            // IN id
    { 0xEE, ENTRY_CopyBytes1 },                            // OUT
    { 0xEF, ENTRY_CopyBytes1 },                            // OUT
    { 0xF0, ENTRY_CopyBytesPrefix },                    // LOCK prefix 
    { 0xF1, ENTRY_Invalid },                            // 
    { 0xF2, ENTRY_CopyBytesPrefix },                    // REPNE prefix 
    { 0xF3, ENTRY_CopyBytesPrefix },                    // REPE prefix 
    { 0xF4, ENTRY_CopyBytes1 },                            // HLT
    { 0xF5, ENTRY_CopyBytes1 },                            // CMC
    { 0xF6, ENTRY_CopyF6 },                                // TEST/0, DIV/6 
    { 0xF7, ENTRY_CopyF7 },                                // TEST/0, DIV/6 
    { 0xF8, ENTRY_CopyBytes1 },                            // CLC
    { 0xF9, ENTRY_CopyBytes1 },                            // STC
    { 0xFA, ENTRY_CopyBytes1 },                            // CLI
    { 0xFB, ENTRY_CopyBytes1 },                            // STI
    { 0xFC, ENTRY_CopyBytes1 },                            // CLD
    { 0xFD, ENTRY_CopyBytes1 },                            // STD
    { 0xFE, ENTRY_CopyBytes2Mod },                        // DEC/1,INC/0
    { 0xFF, ENTRY_CopyFF },                                // CALL/2
    { 0, ENTRY_End },
};

const CDetourDis::COPYENTRY CDetourDis::s_rceCopyTable0F[257] =
{
    { 0x00, ENTRY_CopyBytes2Mod },                        // LLDT/2, etc. 
    { 0x01, ENTRY_CopyBytes2Mod },                        // INVLPG/7, etc. 
    { 0x02, ENTRY_CopyBytes2Mod },                        // LAR/r 
    { 0x03, ENTRY_CopyBytes2Mod },                        // LSL/r 
    { 0x04, ENTRY_Invalid },                            // _04 
    { 0x05, ENTRY_Invalid },                            // _05 
    { 0x06, ENTRY_CopyBytes2 },                            // CLTS 
    { 0x07, ENTRY_Invalid },                            // _07 
    { 0x08, ENTRY_CopyBytes2 },                            // INVD 
    { 0x09, ENTRY_CopyBytes2 },                            // WBINVD 
    { 0x0A, ENTRY_Invalid },                            // _0A 
    { 0x0B, ENTRY_CopyBytes2 },                            // UD2 
    { 0x0C, ENTRY_Invalid },                            // _0C 
    { 0x0D, ENTRY_Invalid },                            // _0D 
    { 0x0E, ENTRY_Invalid },                            // _0E 
    { 0x0F, ENTRY_Invalid },                            // _0F 
    { 0x10, ENTRY_Invalid },                            // _10 
    { 0x11, ENTRY_Invalid },                            // _11 
    { 0x12, ENTRY_Invalid },                            // _12 
    { 0x13, ENTRY_Invalid },                            // _13 
    { 0x14, ENTRY_Invalid },                            // _14 
    { 0x15, ENTRY_Invalid },                            // _15 
    { 0x16, ENTRY_Invalid },                            // _16 
    { 0x17, ENTRY_Invalid },                            // _17 
    { 0x18, ENTRY_Invalid },                            // _18 
    { 0x19, ENTRY_Invalid },                            // _19 
    { 0x1A, ENTRY_Invalid },                            // _1A 
    { 0x1B, ENTRY_Invalid },                            // _1B 
    { 0x1C, ENTRY_Invalid },                            // _1C 
    { 0x1D, ENTRY_Invalid },                            // _1D 
    { 0x1E, ENTRY_Invalid },                            // _1E 
    { 0x1F, ENTRY_Invalid },                            // _1F 
    { 0x20, ENTRY_CopyBytes2Mod },                        // MOV/r 
    { 0x21, ENTRY_CopyBytes2Mod },                        // MOV/r 
    { 0x22, ENTRY_CopyBytes2Mod },                        // MOV/r 
    { 0x23, ENTRY_CopyBytes2Mod },                        // MOV/r 
    { 0x24, ENTRY_Invalid },                            // _24 
    { 0x25, ENTRY_Invalid },                            // _25 
    { 0x26, ENTRY_Invalid },                            // _26 
    { 0x27, ENTRY_Invalid },                            // _27 
    { 0x28, ENTRY_Invalid },                            // _28 
    { 0x29, ENTRY_Invalid },                            // _29 
    { 0x2A, ENTRY_Invalid },                            // _2A 
    { 0x2B, ENTRY_Invalid },                            // _2B 
    { 0x2C, ENTRY_Invalid },                            // _2C 
    { 0x2D, ENTRY_Invalid },                            // _2D 
    { 0x2E, ENTRY_Invalid },                            // _2E 
    { 0x2F, ENTRY_Invalid },                            // _2F 
    { 0x30, ENTRY_CopyBytes2 },                            // WRMSR 
    { 0x31, ENTRY_CopyBytes2 },                            // RDTSC 
    { 0x32, ENTRY_CopyBytes2 },                            // RDMSR 
    { 0x33, ENTRY_CopyBytes2 },                            // RDPMC 
    { 0x34, ENTRY_CopyBytes2 },                            // SYSENTER 
    { 0x35, ENTRY_CopyBytes2 },                            // SYSEXIT 
    { 0x36, ENTRY_Invalid },                            // _36 
    { 0x37, ENTRY_Invalid },                            // _37 
    { 0x38, ENTRY_Invalid },                            // _38 
    { 0x39, ENTRY_Invalid },                            // _39 
    { 0x3A, ENTRY_Invalid },                            // _3A 
    { 0x3B, ENTRY_Invalid },                            // _3B 
    { 0x3C, ENTRY_Invalid },                            // _3C 
    { 0x3D, ENTRY_Invalid },                            // _3D 
    { 0x3E, ENTRY_Invalid },                            // _3E 
    { 0x3F, ENTRY_Invalid },                            // _3F 
    { 0x40, ENTRY_CopyBytes2Mod },                        // CMOVO (0F 40) 
    { 0x41, ENTRY_CopyBytes2Mod },                        // CMOVNO (0F 41) 
    { 0x42, ENTRY_CopyBytes2Mod },                        // CMOVB & CMOVNE (0F 42) 
    { 0x43, ENTRY_CopyBytes2Mod },                        // CMOVAE & CMOVNB (0F 43) 
    { 0x44, ENTRY_CopyBytes2Mod },                        // CMOVE & CMOVZ (0F 44) 
    { 0x45, ENTRY_CopyBytes2Mod },                        // CMOVNE & CMOVNZ (0F 45) 
    { 0x46, ENTRY_CopyBytes2Mod },                        // CMOVBE & CMOVNA (0F 46) 
    { 0x47, ENTRY_CopyBytes2Mod },                        // CMOVA & CMOVNBE (0F 47) 
    { 0x48, ENTRY_CopyBytes2Mod },                        // CMOVS (0F 48) 
    { 0x49, ENTRY_CopyBytes2Mod },                        // CMOVNS (0F 49) 
    { 0x4A, ENTRY_CopyBytes2Mod },                        // CMOVP & CMOVPE (0F 4A) 
    { 0x4B, ENTRY_CopyBytes2Mod },                        // CMOVNP & CMOVPO (0F 4B) 
    { 0x4C, ENTRY_CopyBytes2Mod },                        // CMOVL & CMOVNGE (0F 4C) 
    { 0x4D, ENTRY_CopyBytes2Mod },                        // CMOVGE & CMOVNL (0F 4D) 
    { 0x4E, ENTRY_CopyBytes2Mod },                        // CMOVLE & CMOVNG (0F 4E) 
    { 0x4F, ENTRY_CopyBytes2Mod },                        // CMOVG & CMOVNLE (0F 4F) 
    { 0x50, ENTRY_Invalid },                            // _50 
    { 0x51, ENTRY_Invalid },                            // _51 
    { 0x52, ENTRY_Invalid },                            // _52 
    { 0x53, ENTRY_Invalid },                            // _53 
    { 0x54, ENTRY_Invalid },                            // _54 
    { 0x55, ENTRY_Invalid },                            // _55 
    { 0x56, ENTRY_Invalid },                            // _56 
    { 0x57, ENTRY_Invalid },                            // _57 
    { 0x58, ENTRY_Invalid },                            // _58 
    { 0x59, ENTRY_Invalid },                            // _59 
    { 0x5A, ENTRY_Invalid },                            // _5A 
    { 0x5B, ENTRY_Invalid },                            // _5B 
    { 0x5C, ENTRY_Invalid },                            // _5C 
    { 0x5D, ENTRY_Invalid },                            // _5D 
    { 0x5E, ENTRY_Invalid },                            // _5E 
    { 0x5F, ENTRY_Invalid },                            // _5F 
    { 0x60, ENTRY_CopyBytes2Mod },                        // PUNPCKLBW/r 
    { 0x61, ENTRY_Invalid },                            // _61 
    { 0x62, ENTRY_CopyBytes2Mod },                        // PUNPCKLWD/r 
    { 0x63, ENTRY_CopyBytes2Mod },                        // PACKSSWB/r 
    { 0x64, ENTRY_CopyBytes2Mod },                        // PCMPGTB/r 
    { 0x65, ENTRY_CopyBytes2Mod },                        // PCMPGTW/r 
    { 0x66, ENTRY_CopyBytes2Mod },                        // PCMPGTD/r 
    { 0x67, ENTRY_CopyBytes2Mod },                        // PACKUSWB/r 
    { 0x68, ENTRY_CopyBytes2Mod },                        // PUNPCKHBW/r 
    { 0x69, ENTRY_CopyBytes2Mod },                        // PUNPCKHWD/r 
    { 0x6A, ENTRY_CopyBytes2Mod },                        // PUNPCKHDQ/r 
    { 0x6B, ENTRY_CopyBytes2Mod },                        // PACKSSDW/r 
    { 0x6C, ENTRY_Invalid },                            // _6C 
    { 0x6D, ENTRY_Invalid },                            // _6D 
    { 0x6E, ENTRY_CopyBytes2Mod },                        // MOVD/r 
    { 0x6F, ENTRY_CopyBytes2Mod },                        // MOV/r 
    { 0x70, ENTRY_Invalid },                            // _70 
    { 0x71, ENTRY_CopyBytes2Mod1 },                        // PSLLW/6 ib,PSRAW/4 ib,PSRLW/2 ib 
    { 0x72, ENTRY_CopyBytes2Mod1 },                        // PSLLD/6 ib,PSRAD/4 ib,PSRLD/2 ib 
    { 0x73, ENTRY_CopyBytes2Mod1 },                        // PSLLQ/6 ib,PSRLQ/2 ib 
    { 0x74, ENTRY_CopyBytes2Mod },                        // PCMPEQB/r 
    { 0x75, ENTRY_CopyBytes2Mod },                        // PCMPEQW/r 
    { 0x76, ENTRY_CopyBytes2Mod },                        // PCMPEQD/r 
    { 0x77, ENTRY_CopyBytes2 },                            // EMMS 
    { 0x78, ENTRY_Invalid },                            // _78 
    { 0x79, ENTRY_Invalid },                            // _79 
    { 0x7A, ENTRY_Invalid },                            // _7A 
    { 0x7B, ENTRY_Invalid },                            // _7B 
    { 0x7C, ENTRY_Invalid },                            // _7C 
    { 0x7D, ENTRY_Invalid },                            // _7D 
    { 0x7E, ENTRY_CopyBytes2Mod },                        // MOVD/r 
    { 0x7F, ENTRY_CopyBytes2Mod },                        // MOV/r 
    { 0x80, ENTRY_CopyBytes3Or5Target },                // JO 
    { 0x81, ENTRY_CopyBytes3Or5Target },                // JNO 
    { 0x82, ENTRY_CopyBytes3Or5Target },                // JB,JC,JNAE 
    { 0x83, ENTRY_CopyBytes3Or5Target },                // JAE,JNB,JNC 
    { 0x84, ENTRY_CopyBytes3Or5Target },                // JE,JZ,JZ 
    { 0x85, ENTRY_CopyBytes3Or5Target },                // JNE,JNZ 
    { 0x86, ENTRY_CopyBytes3Or5Target },                // JBE,JNA 
    { 0x87, ENTRY_CopyBytes3Or5Target },                // JA,JNBE 
    { 0x88, ENTRY_CopyBytes3Or5Target },                // JS 
    { 0x89, ENTRY_CopyBytes3Or5Target },                // JNS 
    { 0x8A, ENTRY_CopyBytes3Or5Target },                // JP,JPE 
    { 0x8B, ENTRY_CopyBytes3Or5Target },                // JNP,JPO 
    { 0x8C, ENTRY_CopyBytes3Or5Target },                // JL,NGE 
    { 0x8D, ENTRY_CopyBytes3Or5Target },                // JGE,JNL 
    { 0x8E, ENTRY_CopyBytes3Or5Target },                // JLE,JNG 
    { 0x8F, ENTRY_CopyBytes3Or5Target },                // JG,JNLE 
    { 0x90, ENTRY_CopyBytes2Mod },                        // CMOVO (0F 40) 
    { 0x91, ENTRY_CopyBytes2Mod },                        // CMOVNO (0F 41) 
    { 0x92, ENTRY_CopyBytes2Mod },                        // CMOVB & CMOVC & CMOVNAE (0F 42) 
    { 0x93, ENTRY_CopyBytes2Mod },                        // CMOVAE & CMOVNB & CMOVNC (0F 43) 
    { 0x94, ENTRY_CopyBytes2Mod },                        // CMOVE & CMOVZ (0F 44) 
    { 0x95, ENTRY_CopyBytes2Mod },                        // CMOVNE & CMOVNZ (0F 45) 
    { 0x96, ENTRY_CopyBytes2Mod },                        // CMOVBE & CMOVNA (0F 46) 
    { 0x97, ENTRY_CopyBytes2Mod },                        // CMOVA & CMOVNBE (0F 47) 
    { 0x98, ENTRY_CopyBytes2Mod },                        // CMOVS (0F 48) 
    { 0x99, ENTRY_CopyBytes2Mod },                        // CMOVNS (0F 49) 
    { 0x9A, ENTRY_CopyBytes2Mod },                        // CMOVP & CMOVPE (0F 4A) 
    { 0x9B, ENTRY_CopyBytes2Mod },                        // CMOVNP & CMOVPO (0F 4B) 
    { 0x9C, ENTRY_CopyBytes2Mod },                        // CMOVL & CMOVNGE (0F 4C) 
    { 0x9D, ENTRY_CopyBytes2Mod },                        // CMOVGE & CMOVNL (0F 4D) 
    { 0x9E, ENTRY_CopyBytes2Mod },                        // CMOVLE & CMOVNG (0F 4E) 
    { 0x9F, ENTRY_CopyBytes2Mod },                        // CMOVG & CMOVNLE (0F 4F) 
    { 0xA0, ENTRY_CopyBytes2 },                            // PUSH 
    { 0xA1, ENTRY_CopyBytes2 },                            // POP 
    { 0xA2, ENTRY_CopyBytes2 },                            // CPUID 
    { 0xA3, ENTRY_CopyBytes2Mod },                        // BT  (0F A3)   
    { 0xA4, ENTRY_CopyBytes2Mod1 },                        // SHLD  
    { 0xA5, ENTRY_CopyBytes2Mod },                        // SHLD  
    { 0xA6, ENTRY_Invalid },                            // _A6 
    { 0xA7, ENTRY_Invalid },                            // _A7 
    { 0xA8, ENTRY_CopyBytes2 },                            // PUSH 
    { 0xA9, ENTRY_CopyBytes2 },                            // POP 
    { 0xAA, ENTRY_CopyBytes2 },                            // RSM 
    { 0xAB, ENTRY_CopyBytes2Mod },                        // BTS (0F AB) 
    { 0xAC, ENTRY_CopyBytes2Mod1 },                        // SHRD  
    { 0xAD, ENTRY_CopyBytes2Mod },                        // SHRD  
    { 0xAE, ENTRY_CopyBytes2Mod },                        // FXRSTOR/1,FXSAVE/0 
    { 0xAF, ENTRY_CopyBytes2Mod },                        // IMUL (0F AF) 
    { 0xB0, ENTRY_CopyBytes2Mod },                        // CMPXCHG (0F B0) 
    { 0xB1, ENTRY_CopyBytes2Mod },                        // CMPXCHG (0F B1) 
    { 0xB2, ENTRY_CopyBytes2Mod },                        // LSS/r 
    { 0xB3, ENTRY_CopyBytes2Mod },                        // BTR (0F B3) 
    { 0xB4, ENTRY_CopyBytes2Mod },                        // LFS/r 
    { 0xB5, ENTRY_CopyBytes2Mod },                        // LGS/r 
    { 0xB6, ENTRY_CopyBytes2Mod },                        // MOVZX/r 
    { 0xB7, ENTRY_CopyBytes2Mod },                        // MOVZX/r 
    { 0xB8, ENTRY_Invalid },                            // _B8 
    { 0xB9, ENTRY_Invalid },                            // _B9 
    { 0xBA, ENTRY_CopyBytes2Mod1 },                        // BT & BTC & BTR & BTS (0F BA) 
    { 0xBB, ENTRY_CopyBytes2Mod },                        // BTC (0F BB) 
    { 0xBC, ENTRY_CopyBytes2Mod },                        // BSF (0F BC) 
    { 0xBD, ENTRY_CopyBytes2Mod },                        // BSR (0F BD) 
    { 0xBE, ENTRY_CopyBytes2Mod },                        // MOVSX/r 
    { 0xBF, ENTRY_CopyBytes2Mod },                        // MOVSX/r 
    { 0xC0, ENTRY_CopyBytes2Mod },                        // XADD/r 
    { 0xC1, ENTRY_CopyBytes2Mod },                        // XADD/r 
    { 0xC2, ENTRY_Invalid },                            // _C2 
    { 0xC3, ENTRY_Invalid },                            // _C3 
    { 0xC4, ENTRY_Invalid },                            // _C4 
    { 0xC5, ENTRY_Invalid },                            // _C5 
    { 0xC6, ENTRY_Invalid },                            // _C6 
    { 0xC7, ENTRY_CopyBytes2Mod },                        // CMPXCHG8B (0F C7) 
    { 0xC8, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xC9, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xCA, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xCB, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xCC, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xCD, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xCE, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xCF, ENTRY_CopyBytes2 },                            // BSWAP 0F C8 + rd 
    { 0xD0, ENTRY_Invalid },                            // _D0 
    { 0xD1, ENTRY_CopyBytes2Mod },                        // PSRLW/r 
    { 0xD2, ENTRY_CopyBytes2Mod },                        // PSRLD/r 
    { 0xD3, ENTRY_CopyBytes2Mod },                        // PSRLQ/r 
    { 0xD4, ENTRY_Invalid },                            // _D4 
    { 0xD5, ENTRY_CopyBytes2Mod },                        // PMULLW/r 
    { 0xD6, ENTRY_Invalid },                            // _D6 
    { 0xD7, ENTRY_Invalid },                            // _D7 
    { 0xD8, ENTRY_CopyBytes2Mod },                        // PSUBUSB/r 
    { 0xD9, ENTRY_CopyBytes2Mod },                        // PSUBUSW/r 
    { 0xDA, ENTRY_Invalid },                            // _DA 
    { 0xDB, ENTRY_CopyBytes2Mod },                        // PAND/r 
    { 0xDC, ENTRY_CopyBytes2Mod },                        // PADDUSB/r 
    { 0xDD, ENTRY_CopyBytes2Mod },                        // PADDUSW/r 
    { 0xDE, ENTRY_Invalid },                            // _DE 
    { 0xDF, ENTRY_CopyBytes2Mod },                        // PANDN/r 
    { 0xE0, ENTRY_Invalid },                            // _E0 
    { 0xE1, ENTRY_CopyBytes2Mod },                        // PSRAW/r 
    { 0xE2, ENTRY_CopyBytes2Mod },                        // PSRAD/r 
    { 0xE3, ENTRY_Invalid },                            // _E3 
    { 0xE4, ENTRY_Invalid },                            // _E4 
    { 0xE5, ENTRY_CopyBytes2Mod },                        // PMULHW/r 
    { 0xE6, ENTRY_Invalid },                            // _E6 
    { 0xE7, ENTRY_Invalid },                            // _E7 
    { 0xE8, ENTRY_CopyBytes2Mod },                        // PSUBB/r 
    { 0xE9, ENTRY_CopyBytes2Mod },                        // PSUBW/r 
    { 0xEA, ENTRY_Invalid },                            // _EA 
    { 0xEB, ENTRY_CopyBytes2Mod },                        // POR/r 
    { 0xEC, ENTRY_CopyBytes2Mod },                        // PADDSB/r 
    { 0xED, ENTRY_CopyBytes2Mod },                        // PADDSW/r 
    { 0xEE, ENTRY_Invalid },                            // _EE 
    { 0xEF, ENTRY_CopyBytes2Mod },                        // PXOR/r 
    { 0xF0, ENTRY_Invalid },                            // _F0 
    { 0xF1, ENTRY_CopyBytes2Mod },                        // PSLLW/r 
    { 0xF2, ENTRY_CopyBytes2Mod },                        // PSLLD/r 
    { 0xF3, ENTRY_CopyBytes2Mod },                        // PSLLQ/r 
    { 0xF4, ENTRY_Invalid },                            // _F4 
    { 0xF5, ENTRY_CopyBytes2Mod },                        // PMADDWD/r 
    { 0xF6, ENTRY_Invalid },                            // _F6 
    { 0xF7, ENTRY_Invalid },                            // _F7 
    { 0xF8, ENTRY_CopyBytes2Mod },                        // PSUBB/r 
    { 0xF9, ENTRY_CopyBytes2Mod },                        // PSUBW/r 
    { 0xFA, ENTRY_CopyBytes2Mod },                        // PSUBD/r 
    { 0xFB, ENTRY_Invalid },                            // _FB 
    { 0xFC, ENTRY_CopyBytes2Mod },                        // PADDB/r 
    { 0xFD, ENTRY_CopyBytes2Mod },                        // PADDW/r 
    { 0xFE, ENTRY_CopyBytes2Mod },                        // PADDD/r 
    { 0xFF, ENTRY_Invalid },                            // _FF 
    { 0, ENTRY_End },
};

BOOL CDetourDis::SanityCheckSystem(){
    for(ULONG n = 0; n < 256; n++){
        REFCOPYENTRY pEntry = &s_rceCopyTable[n];

        if(n != pEntry->nOpcode){
            ASSERT(n == pEntry->nOpcode);
            
            return FALSE;
        }
    }

    if(s_rceCopyTable[256].pfCopy != NULL){
        ASSERT(!"Missing end marker.");
        
        return FALSE;
    }
    
    for(n = 0; n < 256; n++){
        REFCOPYENTRY pEntry = &s_rceCopyTable0F[n];

        if(n != pEntry->nOpcode){
            ASSERT(n == pEntry->nOpcode);
            
            return FALSE;
        }
    }

    if(s_rceCopyTable0F[256].pfCopy != NULL){
        ASSERT(!"Missing end marker.");
        
        return FALSE;
    }
    
    return TRUE;
}

It part of this thread. http://forum.ragezone.com/f245/rele...server-dumped-functions-and-addresses-292303/

The problem is this
Code:
Open Watcom C/C++ CL Clone for 386  Version 1.7
Portions Copyright (c) 1995-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
main.cpp
Detour/CDetour.cpp(49): Error! E053: col(2) unknown preprocessing directive '#de
clare'
Detour/CDetour.cpp(49): Note! N393: col(2) included from Detour/CByteArray.h(49)

Detour/CDetour.cpp(49): Note! N393: col(2) included from Detour/CDetour.h(12)
Detour/CDetour.cpp(49): Note! N393: col(2) included from main.cpp(14)
Detour/CDetour.cpp(53): Error! E241: col(16) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(57): Error! E241: col(26) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(57): Error! E336: col(34) declaration specifiers are required
 to declare 'CDetourOrg_Func'
Detour/CDetour.cpp(57): Error! E121: col(34) syntax error
Detour/CDetour.cpp(59): Error! E241: col(14) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(60): Error! E241: col(14) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(62): Error! E241: col(14) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(66): Error! E241: col(14) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(70): Error! E241: col(15) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(74): Error! E241: col(10) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(75): Error! E029: col(18) symbol 'm_pDetourBuf' has not been
declared
Detour/CDetour.cpp(76): Error! E029: col(5) symbol 'm_pOrgBuf' has not been decl
ared
Detour/CDetour.cpp(77): Error! E029: col(5) symbol 'm_pGateBuf' has not been dec
lared
Detour/CDetour.cpp(78): Error! E029: col(5) symbol 'm_pOrgGateBuf' has not been
declared
Detour/CDetour.cpp(80): Error! E029: col(5) symbol 'm_bApplied' has not been dec
lared
Detour/CDetour.cpp(82): Error! E029: col(5) symbol 'Deconstruct' has not been de
clared
Detour/CDetour.cpp(85): Error! E241: col(10) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(86): Error! E229: col(16) function 'CDetour' has already been
 defined
Detour/CDetour.cpp(74): Note! N392: col(10) definition: 'int CDetour( void )'
Detour/CDetour.cpp(89): Error! E241: col(15) class or namespace 'CDetour' has no
t been declared
Detour/CDetour.cpp(90): Error! E133: col(14) too many errors: compilation aborte
d

Can someone help me out with it?

I know its an old thread but i wanna re use it, and add new functions to it.
 
Back
Top