Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Release] RoboGuard v 3.7 Source Code + MATCHSERVER Dumped (Functions and addresses)

Status
Not open for further replies.
Newbie Spellweaver
Joined
Aug 17, 2007
Messages
12
Reaction score
0
ROBOGUARD v 3.7 SOURCE CODE

Main.CPP

Code:
#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN

#include <windows.h>

#include <cmath>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <wtypes.h>
#include <iostream>
#include <fstream>
using namespace std;
#include "Detour/CDetour.h"



#define ONCE( var ) static bool var = false; if(! var ){ var = true;

bool CompareByteArrays(BYTE* data1, BYTE* data2, int len){
        // If both are null, they're equal
        if (data1==NULL && data2==NULL)
                return true;

        // If either but not both are null, they're not equal
        if (data1==NULL || data2==NULL)
                return false;

        for (int i=0; i < len; i++){
                if (data1[i] != data2[i])
                        if(data2[i] != 0xEE)
                        return false;
                }
        return true;
}
DWORD m_CodeBase = 0x00400000;
DWORD m_CodeLength = 0x001C5000;

DWORD SigSearch(BYTE* Signature, int SigLength) {
        BYTE* test = NULL;
        for(unsigned int i = 0; i < (m_CodeLength-SigLength); i++) {
          if(CompareByteArrays((BYTE*)((DWORD)m_CodeBase + i), Signature,SigLength)) {

                        return (DWORD)m_CodeBase + i;
                }
        }
        return 0;
}

//ServerAnnounce
BYTE ServerAnnounceSignature[] = {0X64,0XA1,0X00,0X00,0X00,0X00,0X6A,0XFF,0X68,0XEE,0XEE,0XEE,0XEE,0X50,0X8B,0X44,0X24,0XEE,0X64,0X89,0X25,0X00,0X00,0X00,0X00,0X53,0X56,0X57,0X50,0X68,0X92,0X01,0X00,0X00,};
DWORD ServerAnnounceSignatureOffset = SigSearch(ServerAnnounceSignature, 34);

//OnAdminAnnounce
BYTE OnAdminAnnounceSignature[] = {0X6A,0XFF,0X68,0XEE,0XEE,0XEE,0XEE,0X64,0XA1,0X00,0X00,0X00,0X00,0X50,0X64,0X89,0X25,0X00,0X00,0X00,0X00,0X81,0XEC,0X10,0X01,0X00,0X00,};
DWORD OnAdminAnnounceSignatureOffset = SigSearch(OnAdminAnnounceSignature, 27);

//OnStageStart
BYTE OnStageStartSignature[] = {0X55,0X8B,0XEC,0X83,0XE4,0XF8,0X6A,0XFF,0X68,0XEE,0XEE,0XEE,0XEE,0X50,0X64,0X89,0X25,0X00,0X00,0X00,0X00,0X81,0XEC,0X30,0X04,0X00,0X00,};
DWORD OnStageStartSignatureOffset = SigSearch(OnStageStartSignature, 27);

//OnGameKill
BYTE OnGameKillSignature[] = {0X64,0XA1,0X00,0X00,0X00,0X00,0X6A,0XFF,0X68,0XEE,0XEE,0XEE,0XEE,0X50,0X8B,0X44,0X24,0X14,0X64,0X89,0X25,0X00,0X00,0X00,0X00,0X83,0XEC,0X14,0X53,0X55,0X56,0X50,};
DWORD OnGameKillSignatureOffset = SigSearch(OnGameKillSignature, 32);

//OnUserWhisper
BYTE OnUserWhisperSignature[] = {0X6A,0XFF,0X68,0XEE,0XEE,0XEE,0XEE,0X50,0X64,0X89,0X25,0X00,0X00,0X00,0X00,0X83,0XEC,0X10,0X8B,0X44,0X24,0X24,0X56,};
DWORD OnUserWhisperSignatureOffset = SigSearch(OnUserWhisperSignature, 23);

//OnChannelChat
BYTE OnChannelChatSignature[] = {0XE9,0XEE,0XEE,0XEE,0XEE,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0X8B,0X44,0X24,0X08,0X56,0X57,0X8B,0XF1,0X50,};
DWORD OnChannelChatSignatureOffset = SigSearch(OnChannelChatSignature, 25);

//OnStageChat
BYTE OnStageChatSignature[] = {0X53,0X8B,0X5C,0X24,0X0C,0X55,0X8B,0X6C,0X24,0X0C,0X56,0X57,0X8B,0X7C,0X24,};
DWORD OnStageChatSignatureOffset = SigSearch(OnStageChatSignature, 15);

//OnClanMessage
BYTE OnClanMessageSignature[] = {0X6A,0XFF,0X68,0XEE,0XEE,0XEE,0XEE,0X64,0XA1,0X00,0X00,0X00,0X00,0X50,0X64,0X89,0X25,0X00,0X00,0X00,0X00,0X81,0XEC,0X14,0X03,0X00,0X00,};
DWORD OnClanMessageSignatureOffset = SigSearch(OnClanMessageSignature, 27);

//OnStageCreate
BYTE OnStageCreateSignature[] = {0X83,0XEC,0X10,0X53,0X8B,0X5C,0X24,0X18,0X56,0X57,0X53,0X8B,0XF1,0XE8,0XEE,0XEE,0XEE,0XEE,0X8B,0XF8,0X85,0XFF,};
DWORD OnStageCreateSignatureOffset = SigSearch(OnStageCreateSignature, 22);

HMODULE g_hLocalModule = NULL;
DWORD g_dwUnloadRetAddr = 0;
__declspec(naked) void UnloadProc(){

    __asm push g_hLocalModule
    __asm push g_dwUnloadRetAddr
    __asm jmp dword ptr [FreeLibrary]
    
}



struct MUID{
    long firstID;
    long secondID;
}MYUID;

MUID* Char1ID = new MUID();
MUID* Char2ID = new MUID();
MUID* StageID = new MUID();
long n;
long uidChar;
long uidClanAdmin;
long uidStage;

char pszMessage[128];

//Announcement
typedef void(__cdecl* ServerAnnounceFunc)(MUID* uidChar,char*);
ServerAnnounceFunc ServerAnnounce = (ServerAnnounceFunc)ServerAnnounceSignatureOffset;

//Mega PowerLevel Patch
DWORD OnGameKill = OnGameKillSignatureOffset;
CDetour OnGameKillDet;
void __stdcall OnGameKillHook(MUID* uidChar,MUID* uidChar2){
    Sleep(800); 
}

//Admin Announce Buffer Patch
DWORD OnAdminAnnounce = OnAdminAnnounceSignatureOffset; // 0x00416370;
CDetour OnAdminAnnounceDet;
void __stdcall OnAdminAnnounceHook(MUID* uidChar,char* pszMessage,unsigned long unknown){

    if(strlen(pszMessage)>128) {
    pszMessage = "\0";
    }

    if(unknown = 1){
        unknown = 0;
    }

}

//Whisper Buffer Patch
DWORD OnWhisper = OnUserWhisperSignatureOffset;
CDetour OnWhisperDet;
void __stdcall OnWhisperHook(MUID* uidChar,char* pszSenderName,char* pszTargetName,char* pszMessage){

    if(strlen(pszMessage)>128) {
    pszMessage = "I have attempted to crash you. Please report me.";
    }
}

//Channel Buffer Patch
DWORD OnChannelChat = OnChannelChatSignatureOffset;
CDetour OnChannelChatDet;
void __stdcall OnChannelChatHook(MUID* uidChar,MUID* uidChannel,char* pszMessage){

    if(strlen(pszMessage)>128) {
    pszMessage = "I have attempted to crash the channel. Please report me.";
    }

}

//Stage Buffer Patch
DWORD OnStageChat = OnStageChatSignatureOffset;
CDetour OnStageChatDet;
void __stdcall OnStageChatHook(MUID* uidChar,MUID* uidStage,char* pszMessage){

    if(strlen(pszMessage)>128) {
    pszMessage = "I have attempted to crash the stage. Please report me.";
    }

}

//Clan Buffer Patch
DWORD OnClanMsg = OnClanMessageSignatureOffset;
CDetour OnClanMsgDet;
void __stdcall OnClanMsgHook(MUID* uidChar, char* pszMessage){

    if(strlen(pszMessage)>128){
    pszMessage = "\0";
    }

}

void Initialize(){

//Mega PowerLevel Patch
OnGameKillDet.Detour((BYTE*)OnGameKill, (BYTE*)OnGameKillHook, true);
OnGameKillDet.Apply();

//Admin Announce Patch
OnAdminAnnounceDet.Detour((BYTE*)OnAdminAnnounce, (BYTE*)OnAdminAnnounceHook, true);
OnAdminAnnounceDet.Apply();

//Whisper Buffer Patch
OnWhisperDet.Detour((BYTE*)OnWhisper, (BYTE*)OnWhisperHook, true);
OnWhisperDet.Apply();

//Channel Buffer Patch
OnChannelChatDet.Detour((BYTE*)OnChannelChat, (BYTE*)OnChannelChatHook, true);
OnChannelChatDet.Apply();

//Stage Buffer Patch
OnStageChatDet.Detour((BYTE*)OnStageChat, (BYTE*)OnStageChatHook, true);
OnStageChatDet.Apply();


MessageBox(0,"GZRoboGuard v3.7 Injected!","Coded by OneWhoSighs",MB_ICONINFORMATION);

}


/********************************************************************************/
//Remove the detours/patches when unloaded
void Shutdown(){

//Mega PowerLevel Patch
OnGameKillDet.Remove();

//Admin Announce Patch
OnAdminAnnounceDet.Remove();

//Whisper Buffer Patch
OnWhisperDet.Remove();

//Channel Buffer Patch
OnChannelChatDet.Remove();

//Stage Buffer Patch
OnStageChatDet.Remove();


}
/********************************************************************************/
bool WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved){
    if(dwReason == DLL_PROCESS_ATTACH){
        ONCE(bHasLoaded)
            g_hLocalModule = hModule;
            Initialize();
        }
    }
    else if(dwReason == DLL_PROCESS_DETACH){
        ONCE(bHasShutdown)
            Shutdown();
        }
    
    }
    return true;
}
DETOUR FOLDER
Credits to LanceVorgin

Detour/CDetour.h

Code:
/*****************************
*   Universal Detour Class   *
*            v2.0            *
******************************
*       By LanceVorgin       *
******************************
*        UNI owns all        *
*****************************/

#pragma once

#include "CByteArray.h"

typedef void* (__cdecl* CDetourOrg_Func)( ... );

class CDetour {
public:
    static int Applied();
    static int Removed();
    static void InitRand();

private:
    static int g_iApplied;
    static int g_iRemoved;

    static void* __cdecl NullOrgFunc( ... );
    static CDetourOrg_Func NullOrg;

public:
    CDetour();
    ~CDetour();

    bool Detour(BYTE* pAddr, BYTE* pFuncToCall, bool bAutoReturn = false, bool bNoRegs = false, bool bPolymorphic = false, int iArgsOverride = -1, int iBytesToOverwrite = -1);
    bool Detour(LPCSTR lpLibraryName, LPCSTR lpProcName, BYTE* pFuncToCall, bool bAutoReturn = false, bool bNoRegs = false, bool bPolymorphic = false, int iArgsOverride = -1, int iBytesToOverwrite = -1);

    bool Apply();
    bool Remove();

    bool IsReady();
    bool IsApplied();

    BYTE* GetAddr();

    BYTE* GetFuncToCall();
    void SetFuncToCall(BYTE* pFuncToCall);

    BYTE* GetRetAddress();

    BYTE* GetGateRetAddress();
    void SetGateRetAddress(BYTE* pGateRetAddress);
    
    BYTE* GetThisPtr();
    void SetThisPtr(BYTE* pThisPtr);

    void NoSetThisPtr(bool bNoSetThisPtr);

    void Ret(bool bReturnToOriginal);

    CDetourOrg_Func Org;

private:
    void Deconstruct();
    void FreeBuffers();

    bool Generate();
    
    int GetDetourSize();
    bool GenerateDetour(CByteArray& Buffer, BYTE* pBase, BYTE* pTarget, int iFinalSize = -1);

    bool WriteToAddr(BYTE* pBuffer, int iSize);

    bool m_bReady;
    bool m_bApplied;

    bool m_bAutoReturn;
    bool m_bNoRegs;
    bool m_bPolymorphic;
    int m_iArgsOverride;
    int m_iBytesToOverwrite;

    BYTE* m_pAddr;
    BYTE* m_pFuncToCall;

    BYTE m_ubDetourType;
    int m_iDetourSize;
    BYTE* m_pOrgAfterDetour;

    BYTE* m_pDetourBuf;
    BYTE* m_pOrgBuf;
    BYTE* m_pGateBuf;
    BYTE* m_pOrgGateBuf;

    bool m_bDontReplaceOrgClassInstance;

    BYTE* m_pGateStack;
    BYTE* m_pGateRealRet;

    bool m_bReturnToOriginal;
    BYTE* m_pAutoReturnEndStack;

    BYTE* m_pRetAddress;
    BYTE* m_pClassInstance;
    BYTE* m_pOrgReturnAddress;
    BYTE* m_pOrgStack;
};

class CSimpleDetour {
public:
    static int Applied();
    static int Removed();

private:
    static int g_iApplied;
    static int g_iRemoved;

public:
    CSimpleDetour();
    ~CSimpleDetour();

    bool Detour(BYTE* pAddr, BYTE* pFuncToCall, bool bExecuteOverwrittenOps = true, int iBytesToOverwrite = 0);

    bool Apply();
    bool Remove();

    bool IsReady();
    bool IsApplied();

    BYTE* GetAddr();

    BYTE* GetFuncToCall();
    void SetFuncToCall(BYTE* pFuncToCall);

    BYTE* GetRetAddress();

    void Ret(bool bReturnToOriginal);

private:
    void Deconstruct();
    void FreeBuffers();

    bool Generate();

    bool WriteToAddr(BYTE* pBuffer, int iSize);

    bool m_bReady;
    bool m_bApplied;

    bool m_bExecuteOverwrittenOps;
    int m_iBytesToOverwrite;

    BYTE* m_pAddr;
    BYTE* m_pFuncToCall;

    int m_iDetourSize;
    BYTE* m_pOrgAfterDetour;

    BYTE* m_pDetourBuf;
    BYTE* m_pOrgBuf;
    BYTE* m_pGateBuf;

    BYTE* m_pRetAddress;
};
Detour/CDetour.cpp

Code:
/*****************************
*   Universal Detour Class   *
*            v2.0            *
******************************
*       By LanceVorgin       *
******************************
*        UNI owns all        *
*****************************/

/*
All credit for CDetourDis goes to Micro$oft
GG CB for the ByteArray idea - idiot :P

License:
 I, LanceVorgin, allow you to use these classes in any of your projects under the following conditions:
   * My name appears in your readme and credits along with the fact that my CDetour was used
   * You do not take credit for CDetour
That's all. GPL, closed source, private, it's all good :)

Detour Settings:
    bAutoReturn - If true, after hookfunc is called, the original function will be called with the original args - unless Ret(false) has been called
    bNoRegs - If true, detour does not modify any registers besides esp. Use for fastcalls / other funcs that take params in regs (evil msvc 2k5)
                (usually, detour will save ecx and reset it in Org for class funcs)
    bPolymorphic - If false the detour is a jmp. If true the detour is randomiezed and impliments a random number. These are alot bigger than 5 bytes
    iArgsOverride - Usually, the hookfunc is defined as identical to the function hooked in both args and calling convention. With this set, the
                stack will be modified after the hookfunc is called as if an stdcall with x args has been called. Useful if you have a stdcall
                func with like 10 args that you don't give a poop about (you'd otherwise have to have 10 junk args on your hookfunc)
    iBytesToOverwrite - Overrides the automatic reassembler.

Todo:
 * Add setproxy

 * Add Polymorph Dimension: replace push

   8D 64 24 FC          lea         esp,[esp-4]
   C7 04 24 78 56 34 12 mov         dword ptr [esp], 12345678h

   83 EC 04             sub         esp,4
   C7 04 24 78 56 34 12 mov         dword ptr [esp], 12345678h
*/

#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN

#include <windows.h>
#include <stdlib.h>

#include "CDetourDis.h"

#include "CDetour.h"

void* CDetour::NullOrgFunc( ... ){
    return NULL;
}

CDetourOrg_Func CDetour::NullOrg = (CDetourOrg_Func)CDetour::NullOrgFunc;

int CDetour::g_iApplied = 0;
int CDetour::g_iRemoved = 0;

int CDetour::Applied(){
    return g_iApplied;
}

int CDetour::Removed(){
    return g_iRemoved;
}

void CDetour::InitRand(){
    srand(GetTickCount());
}

CDetour::CDetour(){
    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
    m_pOrgGateBuf = NULL;

    m_bApplied = false;
    
    Deconstruct();
};

CDetour::~CDetour(){
    Deconstruct();
};

void CDetour::Deconstruct(){
    m_bReady = false;

    if(m_bApplied)
        Remove();

    FreeBuffers();

    Org = NullOrgFunc;
    
    m_bAutoReturn = false;
    m_bNoRegs = false;
    m_bPolymorphic = false;
    m_iArgsOverride = -1;
    m_iBytesToOverwrite = -1;

    m_pAddr = NULL;
    m_pFuncToCall = NULL;

    m_ubDetourType = 0;
    m_iDetourSize = 0;
    m_pOrgAfterDetour = NULL;

    m_bDontReplaceOrgClassInstance = false;

    m_bReturnToOriginal = false;
    m_pGateStack = NULL;
    m_pGateRealRet = NULL;
    m_pAutoReturnEndStack = NULL;

    m_pRetAddress = NULL;
    m_pClassInstance = NULL;
    m_pOrgReturnAddress = NULL;
    m_pOrgStack = NULL;
}

void CDetour::FreeBuffers(){
    m_bReady = false;

    if(m_pDetourBuf)
        delete[] m_pDetourBuf;

    if(m_pOrgBuf)
        delete[] m_pOrgBuf;
    
    if(m_pGateBuf)
        delete[] m_pGateBuf;

    if(m_pOrgGateBuf)
        delete[] m_pOrgGateBuf;

    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
    m_pOrgGateBuf = NULL;
}

bool CDetour::Detour(BYTE* pAddr, BYTE* pFuncToCall, bool bAutoReturn, bool bNoRegs, bool bPolymorphic, int iArgsOverride, int iBytesToOverwrite){
    Deconstruct();

    if(!pAddr || !pFuncToCall)
        return false;

    m_pAddr = pAddr;
    m_pFuncToCall = pFuncToCall;

    m_bAutoReturn = bAutoReturn;
    m_bNoRegs = bNoRegs;
    m_bPolymorphic = bPolymorphic;
    m_iArgsOverride = iArgsOverride;
    m_iBytesToOverwrite = iBytesToOverwrite;

    return Generate();
}

bool CDetour::Detour(LPCSTR lpLibraryName, LPCSTR lpProcName, BYTE* pFuncToCall, bool bAutoReturn, bool bNoRegs, bool bPolymorphic, int iArgsOverride, int iBytesToOverwrite){
    HMODULE hModule = LoadLibrary(lpLibraryName);
    
    if(!hModule)
        return false;
    
    BYTE* pTargetAddress = (BYTE*)GetProcAddress(hModule, lpProcName);

    if(!pTargetAddress)
        return false;

    return Detour(pTargetAddress, pFuncToCall, bAutoReturn, bNoRegs, bPolymorphic, iArgsOverride, iBytesToOverwrite);
}

bool CDetour::WriteToAddr(BYTE* pBuffer, int iSize){
    if(!m_bReady)
        return false;

    DWORD dwOldProt, dwDummy;

    if(!VirtualProtect(m_pAddr, iSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
        return false;
    
    if(!memcpy(m_pAddr, pBuffer, iSize))
        return false;

    FlushInstructionCache(GetCurrentProcess(), m_pAddr, iSize);

    VirtualProtect(m_pAddr, iSize, dwOldProt, &dwDummy);

    return true;
}

bool CDetour::Apply(){
    if(!m_bReady || m_bApplied)
        return false;;

    if(!WriteToAddr(m_pDetourBuf, m_iDetourSize))
        return false;

    m_bApplied = true;

    g_iApplied++;

    return true;
}

bool CDetour::Remove(){
    if(!m_bApplied)
        return false;
    
    if(!WriteToAddr(m_pOrgBuf, m_iDetourSize))
        return false;

    m_bApplied = false;

    g_iRemoved++;

    return true;
}

bool CDetour::IsReady(){
    return m_bReady;
}

bool CDetour::IsApplied(){
    return m_bApplied;
}

BYTE* CDetour::GetAddr(){
    return m_pAddr;
}

BYTE* CDetour::GetFuncToCall(){
    return m_pFuncToCall;
}

void CDetour::SetFuncToCall(BYTE* pFuncToCall){
    m_pFuncToCall = pFuncToCall;
}

BYTE* CDetour::GetRetAddress(){
    return m_pRetAddress;
}

BYTE* CDetour::GetGateRetAddress(){
    return m_pGateRealRet;
}

void CDetour::SetGateRetAddress(BYTE* pGateRetAddress){
    m_pGateRealRet = pGateRetAddress;
}

BYTE* CDetour::GetThisPtr(){
    return m_pClassInstance;
}

void CDetour::SetThisPtr(BYTE* pThisPtr){
    m_pClassInstance = pThisPtr;
}

void CDetour::NoSetThisPtr(bool bNoSetThisPtr){
    m_bDontReplaceOrgClassInstance = bNoSetThisPtr;
}

void CDetour::Ret(bool bReturnToOriginal){
    m_bReturnToOriginal = bReturnToOriginal;
}

int CDetour::GetDetourSize(){
    CByteArray Buffer;

    if(!GenerateDetour(Buffer, 0, 0))
        return -1;

    return Buffer.Size();
}

#define RAND_DETOUR_TYPES 9

bool CDetour::GenerateDetour(CByteArray& Buffer, BYTE* pBase, BYTE* pTarget, int iFinalSize){
    Buffer.Clear();

    if(m_ubDetourType > RAND_DETOUR_TYPES)
        return false;

    DWORD dwTmpRnd = ((m_ubDetourType != 0) ? (rand() | (rand() << 16)) : 0);

    switch(m_ubDetourType){
    case 0:
        Buffer += (BYTE)0xE9; //jmp
        
        Buffer += (DWORD)(pTarget - pBase - 5);

        break;

    case 1:
    case 2:
    case 3:
        Buffer += (BYTE)0x68; //push
        Buffer += (DWORD)dwTmpRnd;
        
        Buffer += (BYTE)0x81; //xor dword ptr [esp]
        Buffer += (BYTE)0x34;
        Buffer += (BYTE)0x24;
        
        Buffer += (DWORD)((DWORD)pTarget ^ dwTmpRnd);
        
        break;
        
    case 4:
    case 5:
    case 6:
        Buffer += (BYTE)0x68; //push
        Buffer += (DWORD)(((DWORD)pTarget << ((BYTE)dwTmpRnd & 31)) | ((DWORD)pTarget >> (32 - ((BYTE)dwTmpRnd & 31))));
        
        Buffer += (BYTE)0xC1; //ror dword ptr [esp], 
        Buffer += (BYTE)0x0C;
        Buffer += (BYTE)0x24;
        Buffer += (BYTE)dwTmpRnd;

        break;
    
    case 7:
    case 8:
    case 9:
        Buffer += (BYTE)0x68; //push
        Buffer += (DWORD)(pTarget - dwTmpRnd);

        Buffer += (BYTE)0x81; //add dword ptr [esp], 
        Buffer += (BYTE)0x04;
        Buffer += (BYTE)0x24;

        Buffer += (DWORD)dwTmpRnd;

        break;
    }

    switch(m_ubDetourType){
    case 1:
    case 4:
    case 7:
        Buffer += (BYTE)0xC3; //ret

        break;
        
    case 2:
    case 5:
    case 8:
        Buffer += (BYTE)0xC2; //retn
        Buffer += (WORD)0;

        break;
        
    case 3:
    case 6:
    case 9:
        Buffer += (BYTE)0x83; //add esp, 4
        Buffer += (BYTE)0xC4;
        Buffer += (BYTE)0x04;

        Buffer += (BYTE)0xFF; //jmp dword ptr [esp-4]
        Buffer += (BYTE)0x64;
        Buffer += (BYTE)0x24;
        Buffer += (BYTE)0xFC;

        break;
    }

    if(iFinalSize != -1){
        if(iFinalSize < (int)Buffer.Size())
            return false;

        while((int)Buffer.Size() < iFinalSize)
            Buffer += (BYTE)OP_NOP;
    }

    return true;
}

bool CDetour::Generate(){
    FreeBuffers();

    CByteArray Buffer;

    //-----------------

    if(m_bPolymorphic)
        m_ubDetourType = (BYTE)(rand() % RAND_DETOUR_TYPES) + 1;
    else
        m_ubDetourType = 0;

    int iRawDetourSize = GetDetourSize();

    if(iRawDetourSize == -1)
        return false;

    if(m_iBytesToOverwrite > 0)
        if(m_iBytesToOverwrite < iRawDetourSize){
            if(!m_bPolymorphic)
                return false;

            for(m_ubDetourType = 1; m_ubDetourType <= RAND_DETOUR_TYPES; m_ubDetourType++){
                iRawDetourSize = GetDetourSize();

                if(iRawDetourSize <= m_iBytesToOverwrite)
                    break;
            }

            if(m_ubDetourType > RAND_DETOUR_TYPES)
                return false;
        }

    //-----------------

    //DWORD dwOldProt, dwDummy;

    //if(!VirtualProtect((void*)m_dwAddr, iRawDetourSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
    //    return false;

    //-----------------
    
    Buffer.Clear();

    if(!m_bNoRegs){
        Buffer += (BYTE)0x89; //mov dword ptr, ecx
        Buffer += (BYTE)0x0D;
        Buffer += (DWORD)&m_pClassInstance;
    }
    
    Buffer += (BYTE)0x8F; //pop dword ptr
    Buffer += (BYTE)0x05;
    Buffer += (DWORD)&m_pRetAddress;

    Buffer += (BYTE)0x83; //sub esp, 4
    Buffer += (BYTE)0xEC;
    Buffer += (BYTE)0x04;

    int iCallOrgEndOffsetIndex = -1;
    int iCallOrgEndOffset = -1;

    if(m_bAutoReturn){
        //Buffer += (BYTE)0xCC;

        Buffer += (BYTE)0xC6; //mov byte ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_bReturnToOriginal;
        Buffer += (BYTE)1;

        Buffer += (BYTE)0x8F; //pop dword ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_pGateRealRet;
        
        Buffer += (BYTE)0x89; //mov dword ptr, esp
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //call dword ptr
        Buffer += (BYTE)0x15;
        Buffer += (DWORD)&m_pFuncToCall;

        Buffer += (BYTE)0x80; //cmp byte ptr
        Buffer += (BYTE)0x3D;
        Buffer += (DWORD)&m_bReturnToOriginal;
        Buffer += (BYTE)0;

        Buffer += (BYTE)0x74; //je    
        iCallOrgEndOffsetIndex = Buffer + (BYTE)0;
        
        if(m_iArgsOverride <= 0){
            Buffer += (BYTE)0x89; //mov dword ptr, esp
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pAutoReturnEndStack;
        }

        Buffer += (BYTE)0x8B; //mov esp, dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //call dword ptr
        Buffer += (BYTE)0x15;
        Buffer += (DWORD)&m_pOrgGateBuf;

        if(m_iArgsOverride > 0){
            iCallOrgEndOffset = Buffer.Peek() - iCallOrgEndOffsetIndex - 1;

            Buffer += (BYTE)0x8B; //mov esp, dword ptr
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pGateStack;

            Buffer += (BYTE)0xFF; //push dword ptr
            Buffer += (BYTE)0x35;
            Buffer += (DWORD)&m_pGateRealRet;

            Buffer += (BYTE)0xC2; //retn
            Buffer += (WORD)(m_iArgsOverride * 4);

        }else{
            Buffer += (BYTE)0x8B; //mov esp, dword ptr
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pAutoReturnEndStack;

            iCallOrgEndOffset = Buffer.Peek() - iCallOrgEndOffsetIndex - 1;

            Buffer += (BYTE)0xFF; //jmp dword ptr
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pGateRealRet;

        }
    
    }else if(m_iArgsOverride > 0){
        Buffer += (BYTE)0x8F; //pop dword ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_pGateRealRet;
        
        Buffer += (BYTE)0x89; //mov dword ptr, esp
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //call dword ptr
        Buffer += (BYTE)0x15;
        Buffer += (DWORD)&m_pFuncToCall;

        Buffer += (BYTE)0x8B; //mov esp, dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //push dword ptr
        Buffer += (BYTE)0x35;
        Buffer += (DWORD)&m_pGateRealRet;

        Buffer += (BYTE)0xC2; //retn
        Buffer += (WORD)(m_iArgsOverride * 4);
    
    }else{
        Buffer += (BYTE)0xFF; //jmp dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pFuncToCall;

    }

    m_pGateBuf = Buffer.Copy();

    if(m_bAutoReturn)
        *(BYTE*)&m_pGateBuf[iCallOrgEndOffsetIndex] = (BYTE)iCallOrgEndOffset;

    //-----------------

    Buffer.Clear();

    Buffer += (BYTE)0x8F; //pop dword ptr
    Buffer += (BYTE)0x05;
    Buffer += (DWORD)&m_pOrgReturnAddress;
    
    Buffer += (BYTE)0x89; //mov dword ptr, esp
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pOrgStack;

    Buffer += (BYTE)0x83; //add esp, 4
    Buffer += (BYTE)0xEC;
    Buffer += (BYTE)0x04;

    Buffer += (BYTE)0xC7; //mov dword ptr [esp], 
    Buffer += (BYTE)0x04;
    Buffer += (BYTE)0x24;
    int iOrgReturnAddressIndex = Buffer + (DWORD)0;

    if(!m_bNoRegs){
        Buffer += (BYTE)0x80; //cmp byte ptr
        Buffer += (BYTE)0x3D;
        Buffer += (DWORD)&m_bDontReplaceOrgClassInstance;
        Buffer += (BYTE)0x00;

        Buffer += (BYTE)0x0F; //cmove ecx, dword ptr
        Buffer += (BYTE)0x44;
        Buffer += (BYTE)0x0D;
        Buffer += (DWORD)&m_pClassInstance;
            
        Buffer += (BYTE)0xC6; //mov byte ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_bDontReplaceOrgClassInstance;
        Buffer += (BYTE)0x00;

        //Buffer += (BYTE)0x8B; //mov ecx, dword ptr
        //Buffer += (BYTE)0x0D;
        //Buffer += (DWORD)&m_pClassInstance;
    }

    //-----

    int iOverwrittenOpsIndex = Buffer.Peek();

    int iOverwrittenOps = 0;
    int iOverwrittenBytes = 0;
    
    CDetourDis Dis(NULL, NULL);

    BYTE* pbSrc = m_pAddr;
    
    BYTE* pbLastOp = pbSrc;

    if(m_iBytesToOverwrite > 0){
        iOverwrittenBytes = m_iBytesToOverwrite;

        pbSrc += iOverwrittenBytes;

        Buffer.Grow(iOverwrittenBytes);

    }else{
        while(iOverwrittenBytes < iRawDetourSize){
            pbLastOp = pbSrc;

            if(*pbSrc == OP_BRK)
                break;

            BYTE* pbNew = Dis.CopyInstruction(NULL, pbSrc);

            iOverwrittenOps++;

            int iDelta = (int)(pbNew - pbSrc);

            if((pbNew == NULL) || (iDelta == 0)){
                //VirtualProtect((void*)m_pAddr, m_iDetourSize, pOldProt, &dwDummy);
                
                return false;
            }

            iOverwrittenBytes += iDelta;

            pbSrc += iDelta;

            Buffer.Grow(iDelta);

            pbSrc = pbNew;
        }
    }

    m_iDetourSize = iOverwrittenBytes;
    
    m_pOrgAfterDetour = pbSrc;

    //-----
    
    if(!(*pbLastOp == OP_BRK || *pbLastOp == OP_NOP)){ //align [end of function]
        Buffer += (BYTE)0xFF; //jmp dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pOrgAfterDetour;
    }

    int iOrgReturnAddressOffset = Buffer.Peek();

    Buffer += (BYTE)0x8B; //mov esp, dword ptr
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pOrgStack;

    Buffer += (BYTE)0xFF; //jmp dword ptr
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pOrgReturnAddress;

    m_pOrgGateBuf = Buffer.Copy();

    //-----

    *(DWORD*)&m_pOrgGateBuf[iOrgReturnAddressIndex] = (DWORD)&m_pOrgGateBuf[iOrgReturnAddressOffset];

    BYTE* pbDst = &m_pOrgGateBuf[iOverwrittenOpsIndex];
    pbSrc = (BYTE*)m_pAddr;

    if(m_iBytesToOverwrite > 0){
        memcpy(pbDst, pbSrc, iOverwrittenBytes);
    
    }else{
        for(int iCurOp = 0; iCurOp < iOverwrittenOps; iCurOp++){
            BYTE* pbNew = Dis.CopyInstruction(pbDst, pbSrc);

            pbDst += (pbNew - pbSrc);

            pbSrc = pbNew;
        }

    }

    //-----------------

    if(!GenerateDetour(Buffer, m_pAddr, m_pGateBuf, m_iDetourSize))
        return false;

    m_pDetourBuf = Buffer.Copy();

    Buffer.Clear();

    //-----------------

    Org = (CDetourOrg_Func)m_pOrgGateBuf;

    //-----------------

    m_pOrgBuf = new BYTE[m_iDetourSize];

    memcpy(m_pOrgBuf, m_pAddr, m_iDetourSize);

    //VirtualProtect((void*)m_pAddr, m_iDetourSize, dwOldProt, &dwDummy);

    m_bReady = true;

    return true;
}

int CSimpleDetour::g_iApplied = 0;
int CSimpleDetour::g_iRemoved = 0;

int CSimpleDetour::Applied(){
    return g_iApplied;
}

int CSimpleDetour::Removed(){
    return g_iRemoved;
}

CSimpleDetour::CSimpleDetour(){
    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
    
    Deconstruct();
};

CSimpleDetour::~CSimpleDetour(){
    Deconstruct();
};

void CSimpleDetour::Deconstruct(){
    m_bReady = false;

    if(m_bApplied)
        Remove();

    FreeBuffers();
    
    m_iBytesToOverwrite = 0;

    m_pAddr = NULL;
    m_pFuncToCall = NULL;

    m_iDetourSize = 0;

    m_pRetAddress = 0;
}

void CSimpleDetour::FreeBuffers(){
    m_bReady = false;

    if(m_pDetourBuf)
        delete[] m_pDetourBuf;

    if(m_pOrgBuf)
        delete[] m_pOrgBuf;
    
    if(m_pGateBuf)
        delete[] m_pGateBuf;

    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
}

bool CSimpleDetour::Detour(BYTE* pAddr, BYTE* pFuncToCall, bool bExecuteOverwrittenOps, int iBytesToOverwrite){
    Deconstruct();

    if(!pAddr || !pFuncToCall)
        return false;

    m_pAddr = pAddr;
    m_pFuncToCall = pFuncToCall;

    m_bExecuteOverwrittenOps = bExecuteOverwrittenOps;
    m_iBytesToOverwrite = iBytesToOverwrite;

    return Generate();
}


bool CSimpleDetour::WriteToAddr(BYTE* pBuffer, int iSize){
    if(!m_bReady)
        return false;;

    DWORD dwOldProt, dwDummy;

    if(!VirtualProtect(m_pAddr, iSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
        return false;
    
    if(!memcpy(m_pAddr, pBuffer, iSize))
        return false;

    FlushInstructionCache(GetCurrentProcess(), m_pAddr, iSize);

    VirtualProtect(m_pAddr, iSize, dwOldProt, &dwDummy);

    return true;
}

bool CSimpleDetour::Apply(){
    if(!m_bReady || m_bApplied)
        return false;;

    if(!WriteToAddr(m_pDetourBuf, m_iDetourSize))
        return false;

    m_bApplied = true;

    g_iApplied++;

    return true;
}

bool CSimpleDetour::Remove(){
    if(!m_bApplied)
        return false;
    
    if(!WriteToAddr(m_pOrgBuf, m_iDetourSize))
        return false;

    m_bApplied = false;

    g_iRemoved++;

    return true;
}

bool CSimpleDetour::IsReady(){
    return m_bReady;
}

bool CSimpleDetour::IsApplied(){
    return m_bApplied;
}

BYTE* CSimpleDetour::GetAddr(){
    return m_pAddr;
}

BYTE* CSimpleDetour::GetFuncToCall(){
    return m_pFuncToCall;
}

void CSimpleDetour::SetFuncToCall(BYTE* pFuncToCall){
    m_pFuncToCall = pFuncToCall;
}

BYTE* CSimpleDetour::GetRetAddress(){
    return m_pRetAddress;
}

bool CSimpleDetour::Generate(){
    FreeBuffers();

    CByteArray Buffer;

    //-----------------
    
    Buffer.Clear();

    Buffer += (BYTE)0xE8; //call
    int iDetourOffsetIndex = Buffer + (DWORD)0;

    BYTE* pRawDetourBuf = Buffer.Copy();

    int iRawDetourSize = Buffer.Peek();

    if(m_iBytesToOverwrite > 0)
        if(m_iBytesToOverwrite < iRawDetourSize)
            return false;

    //-----------------

    //DWORD dwOldProt, dwDummy;

    //if(!VirtualProtect(m_pAddr, iRawDetourSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
    //    return false;

    //-----------------
    
    Buffer.Clear();

    Buffer += (BYTE)0x8F; //pop dword ptr
    Buffer += (BYTE)0x05;
    Buffer += (DWORD)&m_pRetAddress;

    Buffer += (BYTE)0xFF; //call dword ptr
    Buffer += (BYTE)0x15;
    Buffer += (DWORD)&m_pFuncToCall;

    //-----------------

    int iOverwrittenOpsIndex = Buffer.Peek();

    int iOverwrittenOps = 0;
    int iOverwrittenBytes = 0;
    
    CDetourDis Dis(NULL, NULL);

    BYTE* pbSrc = m_pAddr;
    
    BYTE* pbLastOp = pbSrc;

    if(m_iBytesToOverwrite > 0){
        iOverwrittenBytes = m_iBytesToOverwrite;

        pbSrc += iOverwrittenBytes;

        Buffer.Grow(iOverwrittenBytes);

    }else{
        while(iOverwrittenBytes < iRawDetourSize){
            pbLastOp = pbSrc;

            if(*pbSrc == OP_BRK)
                break;

            BYTE* pbNew = Dis.CopyInstruction(NULL, pbSrc);

            iOverwrittenOps++;

            int iDelta = (int)(pbNew - pbSrc);

            if((pbNew == NULL) || (iDelta == 0)){
                //VirtualProtect(m_pAddr, m_iDetourSize, dwOldProt, &dwDummy);
                
                return false;
            }

            iOverwrittenBytes += iDelta;

            pbSrc += iDelta;

            Buffer.Grow(iDelta);

            pbSrc = pbNew;
        }
    }

    m_iDetourSize = iOverwrittenBytes;
    
    //-----

    Buffer += (BYTE)0xFF; //jmp dword ptr
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pRetAddress;    

    m_pGateBuf = Buffer.Copy();

    //-----------------

    BYTE* pbDst = &m_pGateBuf[iOverwrittenOpsIndex];
    pbSrc = m_pAddr;

    if(m_iBytesToOverwrite > 0){
        memcpy(pbDst, pbSrc, iOverwrittenBytes);
    
    }else{
        for(int iCurOp = 0; iCurOp < iOverwrittenOps; iCurOp++){
            BYTE* pbNew = Dis.CopyInstruction(pbDst, pbSrc);

            pbDst += (pbNew - pbSrc);

            pbSrc = pbNew;
        }

    }
    
    //-----------------

    *(int*)&pRawDetourBuf[iDetourOffsetIndex] = m_pGateBuf - m_pAddr - 5;

    m_pDetourBuf = new BYTE[m_iDetourSize];

    memset(m_pDetourBuf, OP_NOP, m_iDetourSize);

    memcpy(m_pDetourBuf, pRawDetourBuf, iRawDetourSize);

    delete[] pRawDetourBuf;

    pRawDetourBuf = NULL;

    //-----------------

    m_pOrgBuf = new BYTE[m_iDetourSize];

    memcpy(m_pOrgBuf, m_pAddr, m_iDetourSize);

    //VirtualProtect((void*)m_dwAddr, m_iDetourSize, dwOldProt, &dwDummy);

    m_bReady = true;

    return true;
}
Detour/CByteArray.h

Code:
/*****************************
*   Universal Detour Class   *
*            v2.0            *
******************************
*       By LanceVorgin       *
******************************
*        UNI owns all        *
*****************************/

/*
All credit for CDetourDis goes to Micro$oft
GG CB for the ByteArray idea - idiot :P

License:
 I, LanceVorgin, allow you to use these classes in any of your projects under the following conditions:
   * My name appears in your readme and credits along with the fact that my CDetour was used
   * You do not take credit for CDetour
That's all. GPL, closed source, private, it's all good :)

Detour Settings:
    bAutoReturn - If true, after hookfunc is called, the original function will be called with the original args - unless Ret(false) has been called
    bNoRegs - If true, detour does not modify any registers besides esp. Use for fastcalls / other funcs that take params in regs (evil msvc 2k5)
                (usually, detour will save ecx and reset it in Org for class funcs)
    bPolymorphic - If false the detour is a jmp. If true the detour is randomiezed and impliments a random number. These are alot bigger than 5 bytes
    iArgsOverride - Usually, the hookfunc is defined as identical to the function hooked in both args and calling convention. With this set, the
                stack will be modified after the hookfunc is called as if an stdcall with x args has been called. Useful if you have a stdcall
                func with like 10 args that you don't give a poop about (you'd otherwise have to have 10 junk args on your hookfunc)
    iBytesToOverwrite - Overrides the automatic reassembler.

Todo:
 * Add setproxy

 * Add Polymorph Dimension: replace push

   8D 64 24 FC          lea         esp,[esp-4]
   C7 04 24 78 56 34 12 mov         dword ptr [esp], 12345678h

   83 EC 04             sub         esp,4
   C7 04 24 78 56 34 12 mov         dword ptr [esp], 12345678h
*/

#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN

#include <windows.h>
#include <stdlib.h>

#include "CDetourDis.h"

#include "CDetour.h"

void* CDetour::NullOrgFunc( ... ){
    return NULL;
}

CDetourOrg_Func CDetour::NullOrg = (CDetourOrg_Func)CDetour::NullOrgFunc;

int CDetour::g_iApplied = 0;
int CDetour::g_iRemoved = 0;

int CDetour::Applied(){
    return g_iApplied;
}

int CDetour::Removed(){
    return g_iRemoved;
}

void CDetour::InitRand(){
    srand(GetTickCount());
}

CDetour::CDetour(){
    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
    m_pOrgGateBuf = NULL;

    m_bApplied = false;
    
    Deconstruct();
};

CDetour::~CDetour(){
    Deconstruct();
};

void CDetour::Deconstruct(){
    m_bReady = false;

    if(m_bApplied)
        Remove();

    FreeBuffers();

    Org = NullOrgFunc;
    
    m_bAutoReturn = false;
    m_bNoRegs = false;
    m_bPolymorphic = false;
    m_iArgsOverride = -1;
    m_iBytesToOverwrite = -1;

    m_pAddr = NULL;
    m_pFuncToCall = NULL;

    m_ubDetourType = 0;
    m_iDetourSize = 0;
    m_pOrgAfterDetour = NULL;

    m_bDontReplaceOrgClassInstance = false;

    m_bReturnToOriginal = false;
    m_pGateStack = NULL;
    m_pGateRealRet = NULL;
    m_pAutoReturnEndStack = NULL;

    m_pRetAddress = NULL;
    m_pClassInstance = NULL;
    m_pOrgReturnAddress = NULL;
    m_pOrgStack = NULL;
}

void CDetour::FreeBuffers(){
    m_bReady = false;

    if(m_pDetourBuf)
        delete[] m_pDetourBuf;

    if(m_pOrgBuf)
        delete[] m_pOrgBuf;
    
    if(m_pGateBuf)
        delete[] m_pGateBuf;

    if(m_pOrgGateBuf)
        delete[] m_pOrgGateBuf;

    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
    m_pOrgGateBuf = NULL;
}

bool CDetour::Detour(BYTE* pAddr, BYTE* pFuncToCall, bool bAutoReturn, bool bNoRegs, bool bPolymorphic, int iArgsOverride, int iBytesToOverwrite){
    Deconstruct();

    if(!pAddr || !pFuncToCall)
        return false;

    m_pAddr = pAddr;
    m_pFuncToCall = pFuncToCall;

    m_bAutoReturn = bAutoReturn;
    m_bNoRegs = bNoRegs;
    m_bPolymorphic = bPolymorphic;
    m_iArgsOverride = iArgsOverride;
    m_iBytesToOverwrite = iBytesToOverwrite;

    return Generate();
}

bool CDetour::Detour(LPCSTR lpLibraryName, LPCSTR lpProcName, BYTE* pFuncToCall, bool bAutoReturn, bool bNoRegs, bool bPolymorphic, int iArgsOverride, int iBytesToOverwrite){
    HMODULE hModule = LoadLibrary(lpLibraryName);
    
    if(!hModule)
        return false;
    
    BYTE* pTargetAddress = (BYTE*)GetProcAddress(hModule, lpProcName);

    if(!pTargetAddress)
        return false;

    return Detour(pTargetAddress, pFuncToCall, bAutoReturn, bNoRegs, bPolymorphic, iArgsOverride, iBytesToOverwrite);
}

bool CDetour::WriteToAddr(BYTE* pBuffer, int iSize){
    if(!m_bReady)
        return false;

    DWORD dwOldProt, dwDummy;

    if(!VirtualProtect(m_pAddr, iSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
        return false;
    
    if(!memcpy(m_pAddr, pBuffer, iSize))
        return false;

    FlushInstructionCache(GetCurrentProcess(), m_pAddr, iSize);

    VirtualProtect(m_pAddr, iSize, dwOldProt, &dwDummy);

    return true;
}

bool CDetour::Apply(){
    if(!m_bReady || m_bApplied)
        return false;;

    if(!WriteToAddr(m_pDetourBuf, m_iDetourSize))
        return false;

    m_bApplied = true;

    g_iApplied++;

    return true;
}

bool CDetour::Remove(){
    if(!m_bApplied)
        return false;
    
    if(!WriteToAddr(m_pOrgBuf, m_iDetourSize))
        return false;

    m_bApplied = false;

    g_iRemoved++;

    return true;
}

bool CDetour::IsReady(){
    return m_bReady;
}

bool CDetour::IsApplied(){
    return m_bApplied;
}

BYTE* CDetour::GetAddr(){
    return m_pAddr;
}

BYTE* CDetour::GetFuncToCall(){
    return m_pFuncToCall;
}

void CDetour::SetFuncToCall(BYTE* pFuncToCall){
    m_pFuncToCall = pFuncToCall;
}

BYTE* CDetour::GetRetAddress(){
    return m_pRetAddress;
}

BYTE* CDetour::GetGateRetAddress(){
    return m_pGateRealRet;
}

void CDetour::SetGateRetAddress(BYTE* pGateRetAddress){
    m_pGateRealRet = pGateRetAddress;
}

BYTE* CDetour::GetThisPtr(){
    return m_pClassInstance;
}

void CDetour::SetThisPtr(BYTE* pThisPtr){
    m_pClassInstance = pThisPtr;
}

void CDetour::NoSetThisPtr(bool bNoSetThisPtr){
    m_bDontReplaceOrgClassInstance = bNoSetThisPtr;
}

void CDetour::Ret(bool bReturnToOriginal){
    m_bReturnToOriginal = bReturnToOriginal;
}

int CDetour::GetDetourSize(){
    CByteArray Buffer;

    if(!GenerateDetour(Buffer, 0, 0))
        return -1;

    return Buffer.Size();
}

#define RAND_DETOUR_TYPES 9

bool CDetour::GenerateDetour(CByteArray& Buffer, BYTE* pBase, BYTE* pTarget, int iFinalSize){
    Buffer.Clear();

    if(m_ubDetourType > RAND_DETOUR_TYPES)
        return false;

    DWORD dwTmpRnd = ((m_ubDetourType != 0) ? (rand() | (rand() << 16)) : 0);

    switch(m_ubDetourType){
    case 0:
        Buffer += (BYTE)0xE9; //jmp
        
        Buffer += (DWORD)(pTarget - pBase - 5);

        break;

    case 1:
    case 2:
    case 3:
        Buffer += (BYTE)0x68; //push
        Buffer += (DWORD)dwTmpRnd;
        
        Buffer += (BYTE)0x81; //xor dword ptr [esp]
        Buffer += (BYTE)0x34;
        Buffer += (BYTE)0x24;
        
        Buffer += (DWORD)((DWORD)pTarget ^ dwTmpRnd);
        
        break;
        
    case 4:
    case 5:
    case 6:
        Buffer += (BYTE)0x68; //push
        Buffer += (DWORD)(((DWORD)pTarget << ((BYTE)dwTmpRnd & 31)) | ((DWORD)pTarget >> (32 - ((BYTE)dwTmpRnd & 31))));
        
        Buffer += (BYTE)0xC1; //ror dword ptr [esp], 
        Buffer += (BYTE)0x0C;
        Buffer += (BYTE)0x24;
        Buffer += (BYTE)dwTmpRnd;

        break;
    
    case 7:
    case 8:
    case 9:
        Buffer += (BYTE)0x68; //push
        Buffer += (DWORD)(pTarget - dwTmpRnd);

        Buffer += (BYTE)0x81; //add dword ptr [esp], 
        Buffer += (BYTE)0x04;
        Buffer += (BYTE)0x24;

        Buffer += (DWORD)dwTmpRnd;

        break;
    }

    switch(m_ubDetourType){
    case 1:
    case 4:
    case 7:
        Buffer += (BYTE)0xC3; //ret

        break;
        
    case 2:
    case 5:
    case 8:
        Buffer += (BYTE)0xC2; //retn
        Buffer += (WORD)0;

        break;
        
    case 3:
    case 6:
    case 9:
        Buffer += (BYTE)0x83; //add esp, 4
        Buffer += (BYTE)0xC4;
        Buffer += (BYTE)0x04;

        Buffer += (BYTE)0xFF; //jmp dword ptr [esp-4]
        Buffer += (BYTE)0x64;
        Buffer += (BYTE)0x24;
        Buffer += (BYTE)0xFC;

        break;
    }

    if(iFinalSize != -1){
        if(iFinalSize < (int)Buffer.Size())
            return false;

        while((int)Buffer.Size() < iFinalSize)
            Buffer += (BYTE)OP_NOP;
    }

    return true;
}

bool CDetour::Generate(){
    FreeBuffers();

    CByteArray Buffer;

    //-----------------

    if(m_bPolymorphic)
        m_ubDetourType = (BYTE)(rand() % RAND_DETOUR_TYPES) + 1;
    else
        m_ubDetourType = 0;

    int iRawDetourSize = GetDetourSize();

    if(iRawDetourSize == -1)
        return false;

    if(m_iBytesToOverwrite > 0)
        if(m_iBytesToOverwrite < iRawDetourSize){
            if(!m_bPolymorphic)
                return false;

            for(m_ubDetourType = 1; m_ubDetourType <= RAND_DETOUR_TYPES; m_ubDetourType++){
                iRawDetourSize = GetDetourSize();

                if(iRawDetourSize <= m_iBytesToOverwrite)
                    break;
            }

            if(m_ubDetourType > RAND_DETOUR_TYPES)
                return false;
        }

    //-----------------

    //DWORD dwOldProt, dwDummy;

    //if(!VirtualProtect((void*)m_dwAddr, iRawDetourSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
    //    return false;

    //-----------------
    
    Buffer.Clear();

    if(!m_bNoRegs){
        Buffer += (BYTE)0x89; //mov dword ptr, ecx
        Buffer += (BYTE)0x0D;
        Buffer += (DWORD)&m_pClassInstance;
    }
    
    Buffer += (BYTE)0x8F; //pop dword ptr
    Buffer += (BYTE)0x05;
    Buffer += (DWORD)&m_pRetAddress;

    Buffer += (BYTE)0x83; //sub esp, 4
    Buffer += (BYTE)0xEC;
    Buffer += (BYTE)0x04;

    int iCallOrgEndOffsetIndex = -1;
    int iCallOrgEndOffset = -1;

    if(m_bAutoReturn){
        //Buffer += (BYTE)0xCC;

        Buffer += (BYTE)0xC6; //mov byte ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_bReturnToOriginal;
        Buffer += (BYTE)1;

        Buffer += (BYTE)0x8F; //pop dword ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_pGateRealRet;
        
        Buffer += (BYTE)0x89; //mov dword ptr, esp
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //call dword ptr
        Buffer += (BYTE)0x15;
        Buffer += (DWORD)&m_pFuncToCall;

        Buffer += (BYTE)0x80; //cmp byte ptr
        Buffer += (BYTE)0x3D;
        Buffer += (DWORD)&m_bReturnToOriginal;
        Buffer += (BYTE)0;

        Buffer += (BYTE)0x74; //je    
        iCallOrgEndOffsetIndex = Buffer + (BYTE)0;
        
        if(m_iArgsOverride <= 0){
            Buffer += (BYTE)0x89; //mov dword ptr, esp
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pAutoReturnEndStack;
        }

        Buffer += (BYTE)0x8B; //mov esp, dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //call dword ptr
        Buffer += (BYTE)0x15;
        Buffer += (DWORD)&m_pOrgGateBuf;

        if(m_iArgsOverride > 0){
            iCallOrgEndOffset = Buffer.Peek() - iCallOrgEndOffsetIndex - 1;

            Buffer += (BYTE)0x8B; //mov esp, dword ptr
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pGateStack;

            Buffer += (BYTE)0xFF; //push dword ptr
            Buffer += (BYTE)0x35;
            Buffer += (DWORD)&m_pGateRealRet;

            Buffer += (BYTE)0xC2; //retn
            Buffer += (WORD)(m_iArgsOverride * 4);

        }else{
            Buffer += (BYTE)0x8B; //mov esp, dword ptr
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pAutoReturnEndStack;

            iCallOrgEndOffset = Buffer.Peek() - iCallOrgEndOffsetIndex - 1;

            Buffer += (BYTE)0xFF; //jmp dword ptr
            Buffer += (BYTE)0x25;
            Buffer += (DWORD)&m_pGateRealRet;

        }
    
    }else if(m_iArgsOverride > 0){
        Buffer += (BYTE)0x8F; //pop dword ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_pGateRealRet;
        
        Buffer += (BYTE)0x89; //mov dword ptr, esp
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //call dword ptr
        Buffer += (BYTE)0x15;
        Buffer += (DWORD)&m_pFuncToCall;

        Buffer += (BYTE)0x8B; //mov esp, dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pGateStack;

        Buffer += (BYTE)0xFF; //push dword ptr
        Buffer += (BYTE)0x35;
        Buffer += (DWORD)&m_pGateRealRet;

        Buffer += (BYTE)0xC2; //retn
        Buffer += (WORD)(m_iArgsOverride * 4);
    
    }else{
        Buffer += (BYTE)0xFF; //jmp dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pFuncToCall;

    }

    m_pGateBuf = Buffer.Copy();

    if(m_bAutoReturn)
        *(BYTE*)&m_pGateBuf[iCallOrgEndOffsetIndex] = (BYTE)iCallOrgEndOffset;

    //-----------------

    Buffer.Clear();

    Buffer += (BYTE)0x8F; //pop dword ptr
    Buffer += (BYTE)0x05;
    Buffer += (DWORD)&m_pOrgReturnAddress;
    
    Buffer += (BYTE)0x89; //mov dword ptr, esp
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pOrgStack;

    Buffer += (BYTE)0x83; //add esp, 4
    Buffer += (BYTE)0xEC;
    Buffer += (BYTE)0x04;

    Buffer += (BYTE)0xC7; //mov dword ptr [esp], 
    Buffer += (BYTE)0x04;
    Buffer += (BYTE)0x24;
    int iOrgReturnAddressIndex = Buffer + (DWORD)0;

    if(!m_bNoRegs){
        Buffer += (BYTE)0x80; //cmp byte ptr
        Buffer += (BYTE)0x3D;
        Buffer += (DWORD)&m_bDontReplaceOrgClassInstance;
        Buffer += (BYTE)0x00;

        Buffer += (BYTE)0x0F; //cmove ecx, dword ptr
        Buffer += (BYTE)0x44;
        Buffer += (BYTE)0x0D;
        Buffer += (DWORD)&m_pClassInstance;
            
        Buffer += (BYTE)0xC6; //mov byte ptr
        Buffer += (BYTE)0x05;
        Buffer += (DWORD)&m_bDontReplaceOrgClassInstance;
        Buffer += (BYTE)0x00;

        //Buffer += (BYTE)0x8B; //mov ecx, dword ptr
        //Buffer += (BYTE)0x0D;
        //Buffer += (DWORD)&m_pClassInstance;
    }

    //-----

    int iOverwrittenOpsIndex = Buffer.Peek();

    int iOverwrittenOps = 0;
    int iOverwrittenBytes = 0;
    
    CDetourDis Dis(NULL, NULL);

    BYTE* pbSrc = m_pAddr;
    
    BYTE* pbLastOp = pbSrc;

    if(m_iBytesToOverwrite > 0){
        iOverwrittenBytes = m_iBytesToOverwrite;

        pbSrc += iOverwrittenBytes;

        Buffer.Grow(iOverwrittenBytes);

    }else{
        while(iOverwrittenBytes < iRawDetourSize){
            pbLastOp = pbSrc;

            if(*pbSrc == OP_BRK)
                break;

            BYTE* pbNew = Dis.CopyInstruction(NULL, pbSrc);

            iOverwrittenOps++;

            int iDelta = (int)(pbNew - pbSrc);

            if((pbNew == NULL) || (iDelta == 0)){
                //VirtualProtect((void*)m_pAddr, m_iDetourSize, pOldProt, &dwDummy);
                
                return false;
            }

            iOverwrittenBytes += iDelta;

            pbSrc += iDelta;

            Buffer.Grow(iDelta);

            pbSrc = pbNew;
        }
    }

    m_iDetourSize = iOverwrittenBytes;
    
    m_pOrgAfterDetour = pbSrc;

    //-----
    
    if(!(*pbLastOp == OP_BRK || *pbLastOp == OP_NOP)){ //align [end of function]
        Buffer += (BYTE)0xFF; //jmp dword ptr
        Buffer += (BYTE)0x25;
        Buffer += (DWORD)&m_pOrgAfterDetour;
    }

    int iOrgReturnAddressOffset = Buffer.Peek();

    Buffer += (BYTE)0x8B; //mov esp, dword ptr
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pOrgStack;

    Buffer += (BYTE)0xFF; //jmp dword ptr
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pOrgReturnAddress;

    m_pOrgGateBuf = Buffer.Copy();

    //-----

    *(DWORD*)&m_pOrgGateBuf[iOrgReturnAddressIndex] = (DWORD)&m_pOrgGateBuf[iOrgReturnAddressOffset];

    BYTE* pbDst = &m_pOrgGateBuf[iOverwrittenOpsIndex];
    pbSrc = (BYTE*)m_pAddr;

    if(m_iBytesToOverwrite > 0){
        memcpy(pbDst, pbSrc, iOverwrittenBytes);
    
    }else{
        for(int iCurOp = 0; iCurOp < iOverwrittenOps; iCurOp++){
            BYTE* pbNew = Dis.CopyInstruction(pbDst, pbSrc);

            pbDst += (pbNew - pbSrc);

            pbSrc = pbNew;
        }

    }

    //-----------------

    if(!GenerateDetour(Buffer, m_pAddr, m_pGateBuf, m_iDetourSize))
        return false;

    m_pDetourBuf = Buffer.Copy();

    Buffer.Clear();

    //-----------------

    Org = (CDetourOrg_Func)m_pOrgGateBuf;

    //-----------------

    m_pOrgBuf = new BYTE[m_iDetourSize];

    memcpy(m_pOrgBuf, m_pAddr, m_iDetourSize);

    //VirtualProtect((void*)m_pAddr, m_iDetourSize, dwOldProt, &dwDummy);

    m_bReady = true;

    return true;
}

int CSimpleDetour::g_iApplied = 0;
int CSimpleDetour::g_iRemoved = 0;

int CSimpleDetour::Applied(){
    return g_iApplied;
}

int CSimpleDetour::Removed(){
    return g_iRemoved;
}

CSimpleDetour::CSimpleDetour(){
    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
    
    Deconstruct();
};

CSimpleDetour::~CSimpleDetour(){
    Deconstruct();
};

void CSimpleDetour::Deconstruct(){
    m_bReady = false;

    if(m_bApplied)
        Remove();

    FreeBuffers();
    
    m_iBytesToOverwrite = 0;

    m_pAddr = NULL;
    m_pFuncToCall = NULL;

    m_iDetourSize = 0;

    m_pRetAddress = 0;
}

void CSimpleDetour::FreeBuffers(){
    m_bReady = false;

    if(m_pDetourBuf)
        delete[] m_pDetourBuf;

    if(m_pOrgBuf)
        delete[] m_pOrgBuf;
    
    if(m_pGateBuf)
        delete[] m_pGateBuf;

    m_pDetourBuf = NULL;
    m_pOrgBuf = NULL;
    m_pGateBuf = NULL;
}

bool CSimpleDetour::Detour(BYTE* pAddr, BYTE* pFuncToCall, bool bExecuteOverwrittenOps, int iBytesToOverwrite){
    Deconstruct();

    if(!pAddr || !pFuncToCall)
        return false;

    m_pAddr = pAddr;
    m_pFuncToCall = pFuncToCall;

    m_bExecuteOverwrittenOps = bExecuteOverwrittenOps;
    m_iBytesToOverwrite = iBytesToOverwrite;

    return Generate();
}


bool CSimpleDetour::WriteToAddr(BYTE* pBuffer, int iSize){
    if(!m_bReady)
        return false;;

    DWORD dwOldProt, dwDummy;

    if(!VirtualProtect(m_pAddr, iSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
        return false;
    
    if(!memcpy(m_pAddr, pBuffer, iSize))
        return false;

    FlushInstructionCache(GetCurrentProcess(), m_pAddr, iSize);

    VirtualProtect(m_pAddr, iSize, dwOldProt, &dwDummy);

    return true;
}

bool CSimpleDetour::Apply(){
    if(!m_bReady || m_bApplied)
        return false;;

    if(!WriteToAddr(m_pDetourBuf, m_iDetourSize))
        return false;

    m_bApplied = true;

    g_iApplied++;

    return true;
}

bool CSimpleDetour::Remove(){
    if(!m_bApplied)
        return false;
    
    if(!WriteToAddr(m_pOrgBuf, m_iDetourSize))
        return false;

    m_bApplied = false;

    g_iRemoved++;

    return true;
}

bool CSimpleDetour::IsReady(){
    return m_bReady;
}

bool CSimpleDetour::IsApplied(){
    return m_bApplied;
}

BYTE* CSimpleDetour::GetAddr(){
    return m_pAddr;
}

BYTE* CSimpleDetour::GetFuncToCall(){
    return m_pFuncToCall;
}

void CSimpleDetour::SetFuncToCall(BYTE* pFuncToCall){
    m_pFuncToCall = pFuncToCall;
}

BYTE* CSimpleDetour::GetRetAddress(){
    return m_pRetAddress;
}

bool CSimpleDetour::Generate(){
    FreeBuffers();

    CByteArray Buffer;

    //-----------------
    
    Buffer.Clear();

    Buffer += (BYTE)0xE8; //call
    int iDetourOffsetIndex = Buffer + (DWORD)0;

    BYTE* pRawDetourBuf = Buffer.Copy();

    int iRawDetourSize = Buffer.Peek();

    if(m_iBytesToOverwrite > 0)
        if(m_iBytesToOverwrite < iRawDetourSize)
            return false;

    //-----------------

    //DWORD dwOldProt, dwDummy;

    //if(!VirtualProtect(m_pAddr, iRawDetourSize, PAGE_EXECUTE_READWRITE, &dwOldProt))
    //    return false;

    //-----------------
    
    Buffer.Clear();

    Buffer += (BYTE)0x8F; //pop dword ptr
    Buffer += (BYTE)0x05;
    Buffer += (DWORD)&m_pRetAddress;

    Buffer += (BYTE)0xFF; //call dword ptr
    Buffer += (BYTE)0x15;
    Buffer += (DWORD)&m_pFuncToCall;

    //-----------------

    int iOverwrittenOpsIndex = Buffer.Peek();

    int iOverwrittenOps = 0;
    int iOverwrittenBytes = 0;
    
    CDetourDis Dis(NULL, NULL);

    BYTE* pbSrc = m_pAddr;
    
    BYTE* pbLastOp = pbSrc;

    if(m_iBytesToOverwrite > 0){
        iOverwrittenBytes = m_iBytesToOverwrite;

        pbSrc += iOverwrittenBytes;

        Buffer.Grow(iOverwrittenBytes);

    }else{
        while(iOverwrittenBytes < iRawDetourSize){
            pbLastOp = pbSrc;

            if(*pbSrc == OP_BRK)
                break;

            BYTE* pbNew = Dis.CopyInstruction(NULL, pbSrc);

            iOverwrittenOps++;

            int iDelta = (int)(pbNew - pbSrc);

            if((pbNew == NULL) || (iDelta == 0)){
                //VirtualProtect(m_pAddr, m_iDetourSize, dwOldProt, &dwDummy);
                
                return false;
            }

            iOverwrittenBytes += iDelta;

            pbSrc += iDelta;

            Buffer.Grow(iDelta);

            pbSrc = pbNew;
        }
    }

    m_iDetourSize = iOverwrittenBytes;
    
    //-----

    Buffer += (BYTE)0xFF; //jmp dword ptr
    Buffer += (BYTE)0x25;
    Buffer += (DWORD)&m_pRetAddress;    

    m_pGateBuf = Buffer.Copy();

    //-----------------

    BYTE* pbDst = &m_pGateBuf[iOverwrittenOpsIndex];
    pbSrc = m_pAddr;

    if(m_iBytesToOverwrite > 0){
        memcpy(pbDst, pbSrc, iOverwrittenBytes);
    
    }else{
        for(int iCurOp = 0; iCurOp < iOverwrittenOps; iCurOp++){
            BYTE* pbNew = Dis.CopyInstruction(pbDst, pbSrc);

            pbDst += (pbNew - pbSrc);

            pbSrc = pbNew;
        }

    }
    
    //-----------------

    *(int*)&pRawDetourBuf[iDetourOffsetIndex] = m_pGateBuf - m_pAddr - 5;

    m_pDetourBuf = new BYTE[m_iDetourSize];

    memset(m_pDetourBuf, OP_NOP, m_iDetourSize);

    memcpy(m_pDetourBuf, pRawDetourBuf, iRawDetourSize);

    delete[] pRawDetourBuf;

    pRawDetourBuf = NULL;

    //-----------------

    m_pOrgBuf = new BYTE[m_iDetourSize];

    memcpy(m_pOrgBuf, m_pAddr, m_iDetourSize);

    //VirtualProtect((void*)m_dwAddr, m_iDetourSize, dwOldProt, &dwDummy);

    m_bReady = true;

    return true;
}
Detour/CDetourDis.cpp

Code:
//////////////////////////////////////////////////////////////////////////////
//
//    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;
}
Detour/CDetourDis.h

Code:
//////////////////////////////////////////////////////////////////////////////
//
//    Module:        detours.lib
//  File:        disasm.h
//
//    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
//

#pragma once
#ifndef _DISASM_H_
#define _DISASM_H_

class CDetourDis {
public:
    CDetourDis(PBYTE* ppbTarget, LONG* plExtra);
    
    PBYTE CopyInstruction(PBYTE pbDst, PBYTE pbSrc);
    PBYTE CopyInstructionEx(PBYTE pbDst, PBYTE pbSrc, PBYTE pbDstOverride);
    PBYTE CopyInstructionZero(PBYTE pbDst, PBYTE pbSrc);
    BYTE InstructionLen(PBYTE pbSrc);

    static BOOL    SanityCheckSystem();

public:
    struct COPYENTRY;
    typedef const COPYENTRY* REFCOPYENTRY;

    typedef PBYTE (CDetourDis::* COPYFUNC)(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);

    enum {
        DYNAMIC     = 0x1u,
        ADDRESS     = 0x2u,
        NOENLARGE    = 0x4u,

        SIB            = 0x10u,
        NOTSIB        = 0x0fu,
    };

    struct COPYENTRY {
        ULONG         nOpcode         : 8;                // Opcode
        ULONG        nFixedSize         : 3;                // Fixed size of opcode
        ULONG        nFixedSize16     : 3;                // Fixed size when 16 bit operand
        ULONG        nModOffset         : 3;                // Offset to mod/rm byte (0=none)
        LONG        nRelOffset         : 3;                // Offset to relative target.
        ULONG        nFlagBits        : 4;                // Flags for DYNAMIC, etc.
        COPYFUNC    pfCopy;                                // Function pointer.
    };

protected:
#define ENTRY_CopyBytes1            1, 1, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes1Dynamic        1, 1, 0, 0, DYNAMIC,    CopyBytes
#define ENTRY_CopyBytes2            2, 2, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes2Jump        2, 2, 0, 1, 0,            CopyBytes
#define ENTRY_CopyBytes2CantJump    2, 2, 0, 1, NOENLARGE,    CopyBytes
#define ENTRY_CopyBytes2Dynamic        2, 2, 0, 0, DYNAMIC,    CopyBytes
#define ENTRY_CopyBytes3            3, 3, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes3Dynamic        3, 3, 0, 0, DYNAMIC,    CopyBytes
#define ENTRY_CopyBytes3Or5            5, 3, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes3Or5Target    5, 3, 0, 1, 0,            CopyBytes
#define ENTRY_CopyBytes5Or7Dynamic    7, 5, 0, 0, DYNAMIC,    CopyBytes
#define ENTRY_CopyBytes3Or5Address    5, 3, 0, 0, ADDRESS,    CopyBytes
#define ENTRY_CopyBytes4            4, 4, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes5            5, 5, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes7            7, 7, 0, 0, 0,            CopyBytes
#define ENTRY_CopyBytes2Mod            2, 2, 1, 0, 0,            CopyBytes
#define ENTRY_CopyBytes2Mod1        3, 3, 1, 0, 0,            CopyBytes
#define ENTRY_CopyBytes2ModOperand    6, 4, 1, 0, 0,            CopyBytes
#define ENTRY_CopyBytes3Mod            3, 3, 2, 0, 0,            CopyBytes
#define ENTRY_CopyBytesPrefix        1, 1, 0, 0, 0,            CopyBytesPrefix
#define ENTRY_Copy0F                1, 1, 0, 0, 0,            Copy0F
#define ENTRY_Copy66                1, 1, 0, 0, 0,            Copy66
#define ENTRY_Copy67                1, 1, 0, 0, 0,            Copy67
#define ENTRY_CopyF6                0, 0, 0, 0, 0,            CopyF6
#define ENTRY_CopyF7                0, 0, 0, 0, 0,            CopyF7
#define ENTRY_CopyFF                0, 0, 0, 0, 0,            CopyFF
#define ENTRY_Invalid                1, 1, 0, 0, 0,            Invalid
#define ENTRY_End                    0, 0, 0, 0, 0,            NULL
    
    PBYTE CopyBytes(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    PBYTE CopyBytesPrefix(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    
    PBYTE Invalid(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);

    PBYTE AdjustTarget(PBYTE pbDst, PBYTE pbSrc, LONG cbOp, LONG cbTargetOffset);
    
    VOID Set16BitOperand();
    VOID Set32BitOperand();
    VOID Set16BitAddress();
    VOID Set32BitAddress();
    
protected:
    PBYTE Copy0F(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    PBYTE Copy66(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    PBYTE Copy67(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    PBYTE CopyF6(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    PBYTE CopyF7(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);
    PBYTE CopyFF(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc);

protected:    
    static const COPYENTRY s_rceCopyTable[257];
    static const COPYENTRY s_rceCopyTable0F[257];
    static const BYTE s_rbModRm[256];

protected:
    BOOL m_b16BitOperand;
    BOOL m_b16BitAddress;

    PBYTE* m_ppbTarget;
    LONG* m_plExtra;
    
    LONG m_lScratchExtra;
    PBYTE m_pbScratchTarget;
    BYTE m_rbScratchDst[64];

    BYTE* m_pbDstOverride;
    BOOL m_bAdjustZero;
};

//////////////////////////////////////////////////////////////////////////////

enum {
    OP_PRE_ES       = 0x26,
    OP_PRE_CS       = 0x2e,
    OP_PRE_SS       = 0x36,
    OP_PRE_DS       = 0x3e,
    OP_PRE_FS       = 0x64,
    OP_PRE_GS       = 0x65,
    OP_JMP_SEG      = 0x25,
    
    OP_JA           = 0x77,
    OP_NOP          = 0x90,
    OP_CALL         = 0xe8,
    OP_JMP          = 0xe9,
    OP_PREFIX       = 0xff,
    OP_MOV_EAX      = 0xa1,
    OP_SET_EAX      = 0xb8,
    OP_JMP_EAX      = 0xe0,
    OP_RET_POP      = 0xc2,
    OP_RET          = 0xc3,
    OP_BRK          = 0xcc,

    SIZE_OF_JMP     = 5,
    SIZE_OF_NOP     = 1,
    SIZE_OF_BRK     = 1,
    SIZE_OF_TRP_OPS = SIZE_OF_JMP /* + SIZE_OF_BRK */,
};

//////////////////////////////////////////////////////////////////////////////

inline PBYTE DetourGenMovEax(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xB8;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEbx(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xBB;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEcx(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xB9;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEdx(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xBA;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEsi(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xBE;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEdi(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xBF;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEbp(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xBD;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenMovEsp(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0xBC;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenPush(PBYTE pbCode, UINT32 nValue){
    *pbCode++ = 0x68;
    *((UINT32*&)pbCode)++ = nValue;
    return pbCode;
}

inline PBYTE DetourGenPushad(PBYTE pbCode){
    *pbCode++ = 0x60;
    return pbCode;
}

inline PBYTE DetourGenPopad(PBYTE pbCode){
    *pbCode++ = 0x61;
    return pbCode;
}

inline PBYTE DetourGenJmp(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0){
    if(pbJmpSrc == 0)
        pbJmpSrc = pbCode;
    *pbCode++ = 0xE9;
    *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5);
    return pbCode;
}

inline PBYTE DetourGenCall(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0){
    if(pbJmpSrc == 0)
        pbJmpSrc = pbCode;
    *pbCode++ = 0xE8;
    *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5);
    return pbCode;
}

inline PBYTE DetourGenBreak(PBYTE pbCode){
    *pbCode++ = 0xcc;
    return pbCode;
}

inline PBYTE DetourGenRet(PBYTE pbCode){
    *pbCode++ = 0xc3;
    return pbCode;
}

inline PBYTE DetourGenNop(PBYTE pbCode){
    *pbCode++ = 0x90;
    return pbCode;
}

#define DETOUR_INSTRUCTION_TARGET_NONE          ((PBYTE)0)
#define DETOUR_INSTRUCTION_TARGET_DYNAMIC       ((PBYTE)~0ul)

#endif //_DISASM_H_


--------------------------------------------------------------------------------------------------------------

MATCHSERVER Dumped by OneWhoSighs
All Function And Addresses
Used for Coding in MatchServer

Example:
sourcefiles.txt

Code:
*** SOURCE FILES

Compiland = .\Release\MatchServer.res

Compiland = .\Release\MBMatchAuth.obj
    c:\teamworks\stable\matchserver\mbmatchauth.h
    c:\teamworks\stable\matchserver\mbmatchauth.cpp

Compiland = .\Release\MMatchServer_Schedule.obj
    c:\teamworks\stable\matchserver\mmatchserver_schedule.cpp
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\MBMatchServerConfigReloader.obj
    c:\teamworks\stable\matchserver\mbmatchserverconfigreloader.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mmatchantihack.h
    c:\teamworks\stable\matchserver\mbmatchserverconfigreloader.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\stdexcept
    c:\teamworks\stable\cscommon\include\mmatchevent.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MBMatchServer_ServerKeeper.obj
    c:\teamworks\stable\cscommon\include\muid.h
    c:\teamworks\stable\cscommon\include\mcommandparameter.h
    c:\teamworks\stable\cscommon\include\mmatchobject.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cml\include\mempool.h
    c:\teamworks\stable\matchserver\mbmatchserver_serverkeeper.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory

Compiland = .\Release\MBMatchServer_OnCommand.obj
    c:\teamworks\stable\matchserver\mbmatchserver_oncommand.cpp
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\MBMatchServer_CountryFilter.obj
    c:\teamworks\stable\cscommon\include\masyncproxy.h
    c:\teamworks\stable\matchserver\mbmatchserver_countryfilter.cpp
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\MBMatchServer.obj
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin1.inl
    c:\teamworks\stable\matchserver\mbmatchauth.h
    c:\teamworks\stable\matchserver\mbmatchserver.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\teamworks\stable\cscommon\include\muid.h
    c:\teamworks\stable\cscommon\include\mmatcheventfactory.h
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\TrayIcon.obj
    c:\teamworks\stable\matchserver\trayicon.cpp

Compiland = .\Release\stdafx.obj
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlalloc.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlconv.h

Compiland = .\Release\OutputView.obj
    c:\teamworks\stable\matchserver\outputview.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxcmn.inl

Compiland = .\Release\MatchServerView.obj
    c:\teamworks\stable\matchserver\matchserverview.cpp
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\MatchServerDoc.obj
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlconv.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlcore.h
    c:\teamworks\stable\cscommon\include\mserver.h
    c:\teamworks\stable\matchserver\matchserverdoc.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin2.inl
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\cstringt.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atltime.h
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\MatchServer.obj
    c:\teamworks\stable\cml\include\msync.h
    c:\teamworks\stable\matchserver\matchserver.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin2.inl
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\MainFrm.obj
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlexcept.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin1.inl
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin2.inl
    c:\teamworks\stable\matchserver\mainfrm.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\cstringt.h
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\ExceptionAttacher.obj
    c:\teamworks\stable\cscommon\include\mmatchstatus.h
    c:\teamworks\stable\matchserver\exceptionattacher.cpp
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\ConsoleBar.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\new.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin2.inl
    c:\teamworks\stable\matchserver\consolebar.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\cstringt.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\stdexcept
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxext.inl
    c:\teamworks\stable\cscommon\include\mmatchobject.h

Compiland = .\Release\CommandLogView.obj
    c:\teamworks\stable\matchserver\commandlogview.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxcview.inl
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin2.inl

Compiland = .\Release\ChildFrm.obj
    c:\teamworks\stable\matchserver\childfrm.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afx.inl
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxwin2.inl

Compiland = release/delayhlp.obj
    f:\vs70builds\3077\vc\link\delayimp\delayhlp.cpp

Compiland = release/delayhk1.obj

Compiland = release/delayhk2.obj

Compiland = .\Release\MCommand.obj
    c:\teamworks\stable\cscommon\source\mcommand.cpp
    c:\teamworks\stable\cml\include\mempool.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mcommandparameter.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\deque
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory

Compiland = .\Release\MCommandBuilder.obj
    c:\teamworks\stable\cscommon\source\mcommandbuilder.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MCommandManager.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cml\include\mempool.h
    c:\teamworks\stable\cscommon\source\mcommandmanager.cpp
    c:\teamworks\stable\cscommon\include\mcommandparameter.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\program files\microsoft visual studio .net 2003\vc7\include\utility

Compiland = .\Release\MCommandParameter.obj
    c:\teamworks\stable\cscommon\source\mcommandparameter.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\teamworks\stable\cscommon\include\mcommandparameter.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MUID.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\source\muid.cpp

Compiland = .\Release\MObject.obj
    c:\teamworks\stable\cscommon\source\mobject.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\include\mobject.h

Compiland = .\Release\MSharedCommandTable.obj
    c:\teamworks\stable\cscommon\include\mcommandparameter.h
    c:\teamworks\stable\cscommon\source\msharedcommandtable.cpp

Compiland = .\Release\MMaster.obj

Compiland = .\Release\MCustomClient.obj
    c:\teamworks\stable\cscommon\source\mcustomclient.cpp

Compiland = .\Release\MTCPSocket.obj
    c:\teamworks\stable\cscommon\source\mtcpsocket.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MServer.obj
    c:\teamworks\stable\cscommon\source\mserver.cpp
    c:\teamworks\stable\cscommon\include\mcommandcommunicator.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\RealCPNet.obj
    c:\teamworks\stable\cscommon\source\realcpnet.cpp
    c:\teamworks\stable\cscommon\include\realcpnet.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release\MPacket.obj
    c:\teamworks\stable\cscommon\source\mpacket.cpp

Compiland = .\Release\MPacketCrypter.obj
    c:\teamworks\stable\cscommon\source\mpacketcrypter.cpp

Compiland = .\Release\MLadderMgr.obj
    c:\teamworks\stable\cscommon\source\mladdermgr.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MLadderPicker.obj
    c:\teamworks\stable\cscommon\source\mladderpicker.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MLadderStatistics.obj
    c:\teamworks\stable\cscommon\source\mladderstatistics.cpp

Compiland = .\Release\MTeamGameStrategy.obj
    c:\teamworks\stable\cscommon\source\mteamgamestrategy.cpp

Compiland = .\Release\MBaseChannelRule.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mxmlparser.h
    c:\teamworks\stable\cscommon\source\mbasechannelrule.cpp
    c:\teamworks\stable\cscommon\include\mbasechannelrule.h

Compiland = .\Release\MMatchChannelRule.obj
    c:\teamworks\stable\cscommon\source\mmatchchannelrule.cpp

Compiland = .\Release\MMatchFormula.obj
    c:\teamworks\stable\cscommon\source\mmatchformula.cpp

Compiland = .\Release\MMatchStage.obj
    c:\teamworks\stable\cscommon\source\mmatchstage.cpp
    c:\teamworks\stable\cscommon\include\mmatchstage.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\algorithm
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MMatchStageSetting.obj
    c:\teamworks\stable\cscommon\source\mmatchstagesetting.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\include\mmatchstagesetting.h

Compiland = .\Release\MMatchWorldItem.obj
    c:\teamworks\stable\cscommon\source\mmatchworlditem.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MMatchWorldItemDesc.obj
    c:\teamworks\stable\cscommon\source\mmatchworlditemdesc.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release\MMatchNPCObject.obj
    c:\teamworks\stable\cscommon\source\mmatchnpcobject.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release\MMatchQuest.obj
    c:\teamworks\stable\cscommon\source\mmatchquest.cpp

Compiland = .\Release\MMatchQuestGameLog.obj
    c:\teamworks\stable\cscommon\source\mmatchquestgamelog.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\masyncdbjob.h

Compiland = .\Release\MMatchQuestRound.obj
    c:\teamworks\stable\cscommon\source\mmatchquestround.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MQuestDropTable.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mquestitem.h
    c:\teamworks\stable\cscommon\source\mquestdroptable.cpp
    c:\teamworks\stable\cscommon\include\mquestdroptable.h

Compiland = .\Release\MQuestFormula.obj
    c:\teamworks\stable\cscommon\source\mquestformula.cpp

Compiland = .\Release\MQuestItem.obj
    c:\teamworks\stable\cscommon\source\mquestitem.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mquestitem.h
    c:\teamworks\stable\cscommon\include\masyncdbjob.h

Compiland = .\Release\MQuestLevel.obj
    c:\teamworks\stable\cscommon\source\mquestlevel.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\teamworks\stable\cscommon\include\mquestlevel.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MQuestLevelGenerator.obj
    c:\teamworks\stable\cscommon\source\mquestlevelgenerator.cpp

Compiland = .\Release\MQuestNPCSpawnTrigger.obj
    c:\teamworks\stable\cscommon\source\mquestnpcspawntrigger.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MQuestPlayer.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\source\mquestplayer.cpp
    c:\teamworks\stable\cscommon\include\mquestplayer.h

Compiland = .\Release\MSacrificeQItemTable.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\source\msacrificeqitemtable.cpp

Compiland = .\Release\MBaseQuest.obj
    c:\teamworks\stable\cscommon\source\mbasequest.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release\MQuestMap.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\teamworks\stable\cscommon\source\mquestmap.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cscommon\include\mquestmap.h

Compiland = .\Release\MQuestNPC.obj
    c:\teamworks\stable\cscommon\source\mquestnpc.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\teamworks\stable\cscommon\include\mquestnpc.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MQuestScenario.obj
    c:\teamworks\stable\cscommon\source\mquestscenario.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cscommon\include\mquestscenario.h

Compiland = .\Release\MSurvivalMap.obj
    c:\teamworks\stable\cscommon\source\msurvivalmap.cpp

Compiland = .\Release\MBaseGameType.obj
    c:\teamworks\stable\cscommon\source\mbasegametype.cpp

Compiland = .\Release\MMatchGameType.obj
    c:\teamworks\stable\cscommon\source\mmatchgametype.cpp

Compiland = .\Release\MMatchRule.obj
    c:\teamworks\stable\cscommon\source\mmatchrule.cpp

Compiland = .\Release\MMatchRuleAssassinate.obj
    c:\teamworks\stable\cscommon\source\mmatchruleassassinate.cpp
    c:\teamworks\stable\cscommon\include\mmatchruleassassinate.h

Compiland = .\Release\MMatchRuleBerserker.obj
    c:\teamworks\stable\cscommon\source\mmatchruleberserker.cpp
    c:\teamworks\stable\cscommon\include\mmatchruleberserker.h

Compiland = .\Release\MMatchRuleDeathMatch.obj
    c:\teamworks\stable\cscommon\source\mmatchruledeathmatch.cpp
    c:\teamworks\stable\cscommon\include\mmatchruledeathmatch.h

Compiland = .\Release\MMatchRuleDuel.obj
    c:\teamworks\stable\cscommon\source\mmatchruleduel.cpp
    c:\teamworks\stable\cscommon\include\mmatchrule.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\include\mmatchruleduel.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\map
    c:\teamworks\stable\cscommon\include\mmatchstage.h

Compiland = .\Release\MMatchRuleGladiator.obj
    c:\teamworks\stable\cscommon\source\mmatchrulegladiator.cpp
    c:\teamworks\stable\cscommon\include\mmatchrulegladiator.h

Compiland = .\Release\MMatchRuleTraining.obj
    c:\teamworks\stable\cscommon\source\mmatchruletraining.cpp
    c:\teamworks\stable\cscommon\include\mmatchruletraining.h

Compiland = .\Release\MMatchRuleBaseQuest.obj
    c:\teamworks\stable\cscommon\source\mmatchrulebasequest.cpp

Compiland = .\Release\MMatchRuleQuest.obj
    c:\teamworks\stable\cscommon\include\mmatchrulequest.h
    c:\teamworks\stable\cscommon\source\mmatchrulequest.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\teamworks\stable\cscommon\include\mmatchrule.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MMatchRuleSurvival.obj
    c:\teamworks\stable\cscommon\source\mmatchrulesurvival.cpp
    c:\teamworks\stable\cscommon\include\mmatchrulebasequest.h
    c:\teamworks\stable\cscommon\include\mmatchrulesurvival.h

Compiland = .\Release\MMatchAntiHack.obj
    c:\teamworks\stable\cscommon\source\mmatchantihack.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MMatchItem.obj
    c:\teamworks\stable\cscommon\source\mmatchitem.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release\MMatchObjCache.obj
    c:\teamworks\stable\cscommon\include\mmatchobjcache.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\source\mmatchobjcache.cpp

Compiland = .\Release\MMatchObject.obj
    c:\teamworks\stable\cscommon\source\mmatchobject.cpp
    c:\teamworks\stable\cscommon\include\mmatchitem.h
    c:\teamworks\stable\cscommon\include\mmatchobject.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mquestitem.h

Compiland = .\Release\MMatchDBFilter.obj
    c:\teamworks\stable\cscommon\source\mmatchdbfilter.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring

Compiland = .\Release\MMatchDBMgr.obj
    c:\teamworks\stable\cscommon\source\mmatchdbmgr.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\teamworks\stable\mdatabase\include\odbcrecordset.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MMatchAdmin.obj
    c:\teamworks\stable\cscommon\source\mmatchadmin.cpp

Compiland = .\Release\MMatchChannel.obj
    c:\teamworks\stable\cscommon\source\mmatchchannel.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\teamworks\stable\cscommon\include\msmartrefreshimpl.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\algorithm
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cml\include\mpagearray.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\queue

Compiland = .\Release\MMatchChatRoom.obj
    c:\teamworks\stable\cscommon\source\mmatchchatroom.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mmatchchatroom.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\utility

Compiland = .\Release\MMatchClan.obj
    c:\teamworks\stable\cscommon\source\mmatchclan.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\msmartrefreshimpl.h

Compiland = .\Release\MMatchConfig.obj
    c:\teamworks\stable\cml\include\mlex.h
    c:\teamworks\stable\cscommon\source\mmatchconfig.cpp

Compiland = .\Release\MMatchFriendInfo.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\source\mmatchfriendinfo.cpp

Compiland = .\Release\MMatchPremiumIPCache.obj
    c:\teamworks\stable\cscommon\source\mmatchpremiumipcache.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release\MMatchSchedule.obj
    c:\teamworks\stable\cscommon\source\mmatchschedule.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\program files\microsoft visual studio .net 2003\vc7\include\algorithm
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cscommon\include\mmatchschedule.h

Compiland = .\Release\MMatchShop.obj
    c:\teamworks\stable\cscommon\include\mmatchconfig.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cscommon\source\mmatchshop.cpp

Compiland = .\Release\MMatchShutdown.obj
    c:\teamworks\stable\cscommon\source\mmatchshutdown.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\teamworks\stable\cscommon\include\mmatchshutdown.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MMatchStatus.obj
    c:\teamworks\stable\cscommon\source\mmatchstatus.cpp

Compiland = .\Release\MMatchTransDataType.obj
    c:\teamworks\stable\cscommon\source\mmatchtransdatatype.cpp

Compiland = .\Release\MMatchUtil.obj
    c:\teamworks\stable\cscommon\source\mmatchutil.cpp

Compiland = .\Release\MSmartRefreshImpl.obj
    c:\teamworks\stable\cscommon\source\msmartrefreshimpl.cpp

Compiland = .\Release\MVoteDiscussImpl.obj
    c:\teamworks\stable\cscommon\source\mvotediscussimpl.cpp
    c:\teamworks\stable\cscommon\include\mvotediscussimpl.h

Compiland = .\Release\MVoteMgr.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\source\mvotemgr.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\algorithm

Compiland = .\Release\MMatchServer.obj
    c:\teamworks\stable\cscommon\source\mmatchserver.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\muid.h
    c:\teamworks\stable\cml\include\msync.h
    c:\teamworks\stable\cscommon\include\mpacket.h
    c:\teamworks\stable\cml\include\mtrafficlog.h
    c:\teamworks\stable\cscommon\include\mmatchitem.h
    c:\teamworks\stable\cscommon\include\mmatchobject.h
    c:\teamworks\stable\cscommon\include\mmatchserver.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\functional
    c:\teamworks\stable\cscommon\include\masyncdbjob_updatecharinfodata.h
    c:\teamworks\stable\cscommon\include\mquestitem.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\comip.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\teamworks\stable\cml\include\mxml.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\deque
    c:\teamworks\stable\cscommon\include\mobject.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\cstringt.h
    c:\teamworks\stable\cscommon\include\masyncdbjob.h
    c:\teamworks\stable\cscommon\include\mmatcheventmanager.h
    c:\teamworks\stable\safeudp\include\msafeudp.h
    c:\teamworks\stable\cml\include\mthread.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\teamworks\stable\cscommon\include\mladdergroup.h
    c:\teamworks\stable\cscommon\include\mladdermgr.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\map
    c:\teamworks\stable\cscommon\include\mmatchchannel.h
    c:\teamworks\stable\cscommon\include\mmatchstage.h
    c:\teamworks\stable\cscommon\include\msacrificeqitemtable.h

Compiland = .\Release\MMatchServer_Admin.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_admin.cpp

Compiland = .\Release\MMatchServer_Agent.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\source\mmatchserver_agent.cpp
    c:\teamworks\stable\cscommon\include\magentobject.h

Compiland = .\Release\MMatchServer_AntiHack.obj
    c:\teamworks\stable\cscommon\mmatchserver_antihack.cpp

Compiland = .\Release\MMatchServer_Async.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_async.cpp
    c:\teamworks\stable\cscommon\include\mmatchitem.h

Compiland = .\Release\MMatchServer_Channel.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_channel.cpp

Compiland = .\Release\MMatchServer_Char.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\teamworks\stable\cscommon\include\masyncdbjob.h
    c:\teamworks\stable\cscommon\source\mmatchserver_char.cpp
    c:\teamworks\stable\cscommon\include\masyncdbjob_friendlist.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\teamworks\stable\cscommon\include\mmatchobject.h
    c:\teamworks\stable\cscommon\include\masyncdbjob_charfinalize.h

Compiland = .\Release\MMatchServer_Clan.obj
    c:\teamworks\stable\cscommon\include\mmatchclan.h
    c:\teamworks\stable\cscommon\include\masyncdbjob.h
    c:\teamworks\stable\cscommon\include\masyncdbjob_wintheclangame.h
    c:\teamworks\stable\cscommon\source\mmatchserver_clan.cpp

Compiland = .\Release\MMatchServer_Item.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_item.cpp
    c:\teamworks\stable\cscommon\include\masyncdbjob_bringaccountitem.h

Compiland = .\Release\MMatchServer_Ladder.obj
    c:\teamworks\stable\cscommon\include\mteamgamestrategy.h
    c:\teamworks\stable\cscommon\source\mmatchserver_ladder.cpp
    c:\teamworks\stable\cscommon\include\mladdergroup.h

Compiland = .\Release\MMatchServer_Login.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_login.cpp
    c:\teamworks\stable\cscommon\include\masyncdbjob_getlogininfo.h
    c:\teamworks\stable\cscommon\include\masyncdbjob_insertconnlog.h

Compiland = .\Release\MMatchServer_OnCommand.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_oncommand.cpp

Compiland = .\Release\MMatchServer_Quest.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_quest.cpp

Compiland = .\Release\MMatchServer_Stage.obj
    c:\teamworks\stable\cscommon\source\mmatchserver_stage.cpp
    c:\teamworks\stable\cscommon\include\mbasegametype.h
    c:\teamworks\stable\cscommon\include\mmatchstage.h
    c:\teamworks\stable\cscommon\include\masyncdbjob.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mbasechannelrule.h

Compiland = .\Release\MMatchEvent.obj
    c:\teamworks\stable\cml\include\mmath.h
    c:\teamworks\stable\cscommon\source\mmatchevent.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cscommon\include\masyncdbjob_event.h

Compiland = .\Release\MMatchEventFactory.obj
    c:\teamworks\stable\cscommon\mmatcheventfactory.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\teamworks\stable\cscommon\include\mmatcheventfactory.h
    c:\teamworks\stable\cscommon\include\mmatchevent.h

Compiland = .\Release\MMatchEventManager.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\source\mmatcheventmanager.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MAsyncDBJob.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\cscommon\include\mmatchquestgamelog.h

Compiland = .\Release\MAsyncDBJob_BringAccountItem.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_bringaccountitem.cpp

Compiland = .\Release\MAsyncDBJob_CharFinalize.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_charfinalize.cpp

Compiland = .\Release\MAsyncDBJob_CountryFilter.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_countryfilter.cpp

Compiland = .\Release\MAsyncDBJob_Event.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_event.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector

Compiland = .\Release\MAsyncDBJob_FriendList.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_friendlist.cpp

Compiland = .\Release\MAsyncDBJob_GetLoginInfo.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_getlogininfo.cpp

Compiland = .\Release\MAsyncDBJob_InsertConnLog.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_insertconnlog.cpp

Compiland = .\Release\MAsyncDBJob_UpdateCharInfoData.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_updatecharinfodata.cpp

Compiland = .\Release\MAsyncDBJob_WinTheClanGame.obj
    c:\teamworks\stable\cscommon\source\masyncdbjob_wintheclangame.cpp

Compiland = .\Release\MAsyncProxy.obj
    c:\teamworks\stable\cscommon\source\masyncproxy.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\list
    c:\teamworks\stable\cscommon\include\masyncproxy.h

Compiland = .\Release\MCommandCommunicator.obj
    c:\teamworks\stable\cscommon\source\mcommandcommunicator.cpp
    c:\teamworks\stable\cscommon\include\mpacketcrypter.h
    c:\teamworks\stable\cscommon\include\mcommandcommunicator.h

Compiland = .\Release\MXmlParser.obj
    c:\teamworks\stable\cscommon\source\mxmlparser.cpp

Compiland = .\Release\MBaseLocale.obj
    c:\teamworks\stable\cscommon\source\mbaselocale.cpp

Compiland = .\Release\MMatchLocale.obj
    c:\teamworks\stable\cscommon\source\mmatchlocale.cpp

Compiland = .\Release\MNJ_DBAgentClient.obj
    c:\teamworks\stable\cscommon\source\mnj_dbagentclient.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\teamworks\stable\cscommon\include\mnj_dbagentclient.h

Compiland = .\Release\MBaseStringResManager.obj
    c:\teamworks\stable\cscommon\source\mbasestringresmanager.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring
    c:\program files\microsoft visual studio .net 2003\vc7\include\utility
    c:\program files\microsoft visual studio .net 2003\vc7\include\string
    c:\teamworks\stable\cscommon\include\mstringres.h
    c:\teamworks\stable\cscommon\include\mbasestringresmanager.h

Compiland = .\Release\MMatchStringResManager.obj
    c:\teamworks\stable\cscommon\source\mmatchstringresmanager.cpp

Compiland = .\Release\MMatchDebug.obj
    c:\teamworks\stable\cscommon\source\mmatchdebug.cpp

Compiland = .\Release\MSafeUDP.obj
    c:\teamworks\stable\safeudp\include\mbasepacket.h
    c:\teamworks\stable\safeudp\source\msafeudp.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree
    c:\program files\microsoft visual studio .net 2003\vc7\include\list

Compiland = .\Release\MDatabase.obj
    c:\teamworks\stable\mdatabase\source\mdatabase.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\cstringt.h

Compiland = .\Release\ODBCRecordset.obj
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlcomcli.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlcomtime.inl
    c:\teamworks\stable\mdatabase\source\odbcrecordset.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\afxdb.inl
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlsimpstr.h
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\cstringt.h
    c:\program files\microsoft visual studio .net 2003\vc7\atlmfc\include\atlcomtime.h
    c:\teamworks\stable\mdatabase\include\odbcrecordset.h

Compiland = .\Release_publish\CMLexicalAnalyzer.obj
    c:\teamworks\stable\cml\source\cmlexicalanalyzer.cpp
    c:\teamworks\stable\cml\include\cmptrlist.h

Compiland = .\Release_publish\FileInfo.obj
    c:\teamworks\stable\cml\source\fileinfo.cpp

Compiland = .\Release_publish\MBlobArray.obj
    c:\teamworks\stable\cml\source\mblobarray.cpp

Compiland = .\Release_publish\MCrashDump.obj
    c:\teamworks\stable\cml\source\mcrashdump.cpp

Compiland = .\Release_publish\MCRC32.obj
    c:\teamworks\stable\cml\source\mcrc32.cpp

Compiland = .\Release_publish\MDebug.obj
    c:\teamworks\stable\cml\source\mdebug.cpp

Compiland = .\Release_publish\MLex.obj
    c:\teamworks\stable\cml\source\mlex.cpp

Compiland = .\Release_publish\MLocale.obj
    c:\teamworks\stable\cml\source\mlocale.cpp

Compiland = .\Release_publish\MPdb.obj
    c:\teamworks\stable\cml\source\mpdb.cpp

Compiland = .\Release_publish\MProcessController.obj
    c:\teamworks\stable\cml\source\mprocesscontroller.cpp

Compiland = .\Release_publish\MRegistry.obj
    c:\teamworks\stable\cml\source\mregistry.cpp

Compiland = .\Release_publish\MSmartRefresh.obj
    c:\teamworks\stable\cml\source\msmartrefresh.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release_publish\MStrEx.obj
    c:\teamworks\stable\cml\source\mstrex.cpp

Compiland = .\Release_publish\MThread.obj
    c:\teamworks\stable\cml\source\mthread.cpp
    c:\teamworks\stable\cml\include\mthread.h

Compiland = .\Release_publish\MUtil.obj
    c:\teamworks\stable\cml\source\mutil.cpp

Compiland = .\Release_publish\MXml.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\comutil.h
    c:\teamworks\stable\cml\release_publish\msxml.tli
    c:\teamworks\stable\cml\source\mxml.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\comip.h

Compiland = .\Release_publish\MZFileSystem.obj
    c:\teamworks\stable\cml\source\mzfilesystem.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xtree

Compiland = .\Release_publish\MZip.obj
    c:\teamworks\stable\cml\source\mzip.cpp

Compiland = zutil.obj

Compiland = inftrees.obj

Compiland = inflate.obj

Compiland = inffast.obj

Compiland = crc32.obj

Compiland = adler32.obj

Compiland = .\Release\MCountryFilterDBMgr.obj
    c:\teamworks\stable\mcountryfilter\source\mcountryfilterdbmgr.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\mcountryfilter\include\mcountryfilter.h

Compiland = .\Release\MCountryFilter.obj
    c:\program files\microsoft visual studio .net 2003\vc7\include\xutility
    c:\program files\microsoft visual studio .net 2003\vc7\include\memory
    c:\program files\microsoft visual studio .net 2003\vc7\include\vector
    c:\teamworks\stable\mcountryfilter\source\mcountryfilter.cpp
    c:\program files\microsoft visual studio .net 2003\vc7\include\algorithm
    c:\teamworks\stable\mcountryfilter\include\mcountryfilter.h

Compiland = .\Release\CPSSOLib.obj

Compiland = libcomservice2.dll

Compiland = .\Release\btoe.obj

Compiland = .\Release\hash.obj

Compiland = .\Release\keycrunch.obj

Compiland = .\Release\md4c.obj

Compiland = .\Release\md5c.obj

Compiland = .\Release\MessageDigest.obj

Compiland = .\Release\sha1dgst.obj

Compiland = .\Release\XCrackChk.obj

Compiland = .\Release\XCrackChkW.obj

Compiland = INTEL\$NW\dbvar.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dbvar.cpp

Compiland = INTEL\$NW\dblong.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dblong.cpp

Compiland = INTEL\$NW\dbflt.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dbflt.cpp

Compiland = INTEL\$NW\dbview.obj

Compiland = INTEL\$NW\dbrfx.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dbrfx.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltime.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlcomtime.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h

Compiland = INTEL\$NW\dbcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dbcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxdb.inl

Compiland = INTEL\$NW\oledoccl.obj

Compiland = INTEL\$NW\oledocip.obj

Compiland = INTEL\$NW\oledoctg.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledoctg.cpp

Compiland = INTEL\$NW\oledocob.obj

Compiland = INTEL\$NW\oledocvw.obj

Compiland = INTEL\$NW\occdlg.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\occdlg.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl

Compiland = INTEL\$NW\occlock.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\occlock.cpp

Compiland = INTEL\$NW\occsite.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atldbcli.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\occsite.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlcomcli.h
    f:\vs70builds\3077\devtools\common\win32sdk\include\unknwn.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlcomtime.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxole.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxpriv2.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlalloc.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlbase.h

Compiland = INTEL\$NW\occcont.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\occcont.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtempl.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl

Compiland = INTEL\$NW\occevent.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\occevent.cpp

Compiland = INTEL\$NW\occmgr.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\occmgr.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h

Compiland = INTEL\$NW\oletyplb.obj

Compiland = INTEL\$NW\viewrich.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewrich.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltypes.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcoll.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxole.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxodlgs.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcmn.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxrich.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxdlgs.inl

Compiland = INTEL\$NW\olecall.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olecall.cpp

Compiland = INTEL\$NW\oleunk.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oleunk.cpp

Compiland = INTEL\$NW\oleui1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oleui1.cpp

Compiland = INTEL\$NW\olereg.obj

Compiland = INTEL\$NW\olesvr2.obj

Compiland = INTEL\$NW\olesvr1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olesvr1.cpp

Compiland = INTEL\$NW\olestrm.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olestrm.cpp

Compiland = INTEL\$NW\olemisc.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olemisc.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlconv.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxole.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h

Compiland = INTEL\$NW\olelink.obj

Compiland = INTEL\$NW\oleipfrm.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oleipfrm.cpp

Compiland = INTEL\$NW\olefact.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olefact.cpp

Compiland = INTEL\$NW\oleenum.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oleenum.cpp

Compiland = INTEL\$NW\olemsgf.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olemsgf.cpp

Compiland = INTEL\$NW\oledrop1.obj

Compiland = INTEL\$NW\oledoc1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledoc1.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcoll.inl

Compiland = INTEL\$NW\olevar.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olevar.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxole.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h

Compiland = INTEL\$NW\oledata.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledata.cpp

Compiland = INTEL\$NW\oledlgs3.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledlgs3.cpp

Compiland = INTEL\$NW\oledlgs2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledlgs2.cpp

Compiland = INTEL\$NW\oledlgs1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledlgs1.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlcommem.h

Compiland = INTEL\$NW\oledisp2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledisp2.cpp

Compiland = INTEL\$NW\oledisp1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledisp1.cpp

Compiland = INTEL\$NW\oledobj2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledobj2.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h

Compiland = INTEL\$NW\oledobj1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oledobj1.cpp

Compiland = INTEL\$NW\olecnvrt.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olecnvrt.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlcommem.h

Compiland = INTEL\$NW\olecli3.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olecli3.cpp

Compiland = INTEL\$NW\olecli2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olecli2.cpp

Compiland = INTEL\$NW\olecli1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olecli1.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxole.inl

Compiland = INTEL\$NW\oleinit.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\oleinit.cpp

Compiland = INTEL\$NW\olelock.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\olelock.cpp

Compiland = INTEL\$NW\appmodul.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appmodul.cpp

Compiland = INTEL\$NW\nolib.obj

Compiland = INTEL\$NW\filelist.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\filelist.cpp

Compiland = INTEL\$NW\apphelp.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\apphelp.cpp

Compiland = INTEL\$NW\appprnt.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appprnt.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxdlgs.h

Compiland = INTEL\$NW\appdlg.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appdlg.cpp

Compiland = INTEL\$NW\appui3.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appui3.cpp

Compiland = INTEL\$NW\appui2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appui2.cpp

Compiland = INTEL\$NW\appui1.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appui1.cpp

Compiland = INTEL\$NW\appui.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appui.cpp

Compiland = INTEL\$NW\appterm.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appterm.cpp

Compiland = INTEL\$NW\appinit.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appinit.cpp

Compiland = INTEL\$NW\appcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\appcore.cpp

Compiland = INTEL\$NW\thrdcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\thrdcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltypes.inl

Compiland = INTEL\$NW\viewcmn.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewcmn.cpp

Compiland = INTEL\$NW\viewprev.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewprev.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxole.inl

Compiland = INTEL\$NW\viewedit.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewedit.cpp

Compiland = INTEL\$NW\viewform.obj

Compiland = INTEL\$NW\viewscrl.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewscrl.cpp
    f:\vs70builds\3077\devtools\common\win32sdk\include\zmouse.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl

Compiland = INTEL\$NW\viewprnt.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewprnt.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h

Compiland = INTEL\$NW\viewcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\viewcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afximpl.h

Compiland = INTEL\$NW\docmgr.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\docmgr.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h

Compiland = INTEL\$NW\docmulti.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\docmulti.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcoll.inl

Compiland = INTEL\$NW\doctempl.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\doctempl.cpp

Compiland = INTEL\$NW\doccore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\doccore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl

Compiland = INTEL\$NW\cmdtarg.obj
    f:\vs70builds\3077\devtools\common\win32sdk\include\guiddef.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\cmdtarg.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl

Compiland = INTEL\$NW\winocc.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcoll.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winocc.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtempl.h

Compiland = INTEL\$NW\winutil.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winutil.cpp

Compiland = INTEL\$NW\afxcrit.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxcrit.cpp

Compiland = INTEL\$NW\auxdata.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\auxdata.cpp

Compiland = INTEL\$NW\winmenu.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winmenu.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winhand_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl

Compiland = INTEL\$NW\winstr.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winstr.cpp

Compiland = INTEL\$NW\wingdix.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\wingdix.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl

Compiland = INTEL\$NW\wingdi.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\wingdi.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winhand_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl

Compiland = INTEL\$NW\dlgtempl.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgtempl.cpp

Compiland = INTEL\$NW\dlgfr.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgfr.cpp

Compiland = INTEL\$NW\dlgfnt.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgfnt.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxdlgs.inl

Compiland = INTEL\$NW\dlgprnt.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgprnt.cpp

Compiland = INTEL\$NW\dlgfile.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgfile.cpp

Compiland = INTEL\$NW\dlgcomm.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgcomm.cpp

Compiland = INTEL\$NW\dlgfloat.obj

Compiland = INTEL\$NW\dlgdata.obj

Compiland = INTEL\$NW\dlgcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dlgcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl

Compiland = INTEL\$NW\winctrl4.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winctrl4.cpp

Compiland = INTEL\$NW\winctrl2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winctrl2.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winhand_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl

Compiland = INTEL\$NW\winctrl1.obj

Compiland = INTEL\$NW\barcool.obj

Compiland = INTEL\$NW\dcmeta.obj

Compiland = INTEL\$NW\dcprev.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dcprev.cpp

Compiland = INTEL\$NW\dockcont.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\dockcont.cpp

Compiland = INTEL\$NW\bardock.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\bardock.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltypes.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcoll.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl

Compiland = INTEL\$NW\barstat.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\barstat.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl

Compiland = INTEL\$NW\bardlg.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\bardlg.cpp

Compiland = INTEL\$NW\bartool.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\bartool.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltypes.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h

Compiland = INTEL\$NW\barcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\barcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl

Compiland = INTEL\$NW\winhand.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winhand.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winhand_.h

Compiland = INTEL\$NW\winmini.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winmini.cpp

Compiland = INTEL\$NW\tooltip.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\tooltip.cpp

Compiland = INTEL\$NW\winmdi.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winmdi.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxpriv.h

Compiland = INTEL\$NW\winfrmx.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winfrmx.cpp

Compiland = INTEL\$NW\winfrm2.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winfrm2.cpp

Compiland = INTEL\$NW\winfrm.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winfrm.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltypes.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcoll.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin1.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcmn.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxcmn2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h

Compiland = INTEL\$NW\wincore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl
    f:\vs70builds\3077\devtools\common\win32sdk\include\multimon.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlacc.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\wincore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtempl.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\winhand_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxwin2.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlbase.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h

Compiland = INTEL\$NW\fixalloc.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\fixalloc.cpp

Compiland = INTEL\$NW\afxtls.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxtls.cpp

Compiland = INTEL\$NW\afxstate.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxstate.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afxtls_.h

Compiland = INTEL\$NW\afxdbcs.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxdbcs.cpp

Compiland = INTEL\$NW\strcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\strcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpstr.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\cstringt.h

Compiland = INTEL\$NW\plex.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\plex.cpp

Compiland = INTEL\$NW\map_sp.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\map_sp.cpp

Compiland = INTEL\$NW\map_pp.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\map_pp.cpp

Compiland = INTEL\$NW\list_p.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\list_p.cpp

Compiland = INTEL\$NW\list_o.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\list_o.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl

Compiland = INTEL\$NW\array_u.obj

Compiland = INTEL\$NW\array_p.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\array_p.cpp

Compiland = INTEL\$NW\array_d.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\array_d.cpp

Compiland = INTEL\$NW\array_b.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\array_b.cpp

Compiland = INTEL\$NW\filest.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atltime.inl
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\filest.cpp

Compiland = INTEL\$NW\filex.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\filex.cpp

Compiland = INTEL\$NW\fileshrd.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\fileshrd.cpp

Compiland = INTEL\$NW\filemem.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\filemem.cpp

Compiland = INTEL\$NW\filecore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\filecore.cpp

Compiland = INTEL\$NW\afxabort.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxabort.cpp

Compiland = INTEL\$NW\afxmem.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\afxmem.cpp

Compiland = INTEL\$NW\arcstrm.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\arcstrm.cpp

Compiland = INTEL\$NW\arcex.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\arcex.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl

Compiland = INTEL\$NW\arcobj.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\arcobj.cpp

Compiland = INTEL\$NW\arccore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\arccore.cpp

Compiland = INTEL\$NW\except.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\except.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\afx.inl

Compiland = INTEL\$NW\objcore.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\mfc\objcore.cpp
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlcore.h

Compiland = ..\build\intel\mt_obj\util.obj

Compiland = ..\build\intel\mt_obj\matherr.obj

Compiland = ..\build\intel\mt_obj\ldexp.obj

Compiland = ..\build\intel\mt_obj\ieeemisc.obj

Compiland = ..\build\intel\mt_obj\fpexcept.obj

Compiland = ..\build\intel\mt_obj\libm_error.obj

Compiland = ..\build\intel\mt_obj\pow_pentium4.obj

Compiland = ..\build\intel\mt_obj\ceil_pentium4.obj

Compiland = ..\build\intel\mt_obj\floor_pentium4.obj

Compiland = ..\build\intel\mt_obj\cpu_disp.obj

Compiland = ..\build\intel\mt_obj\pow.obj

Compiland = ..\build\intel\mt_obj\testfdiv.obj

Compiland = ..\build\intel\mt_obj\powhlp.obj

Compiland = ..\build\intel\mt_obj\ieee87.obj

Compiland = ..\build\intel\mt_obj\genexcep.obj

Compiland = ..\build\intel\mt_obj\ftol2.obj

Compiland = ..\build\intel\mt_obj\frnd.obj

Compiland = ..\build\intel\mt_obj\fpctrl.obj

Compiland = ..\build\intel\mt_obj\floor.obj

Compiland = ..\build\intel\mt_obj\common.obj

Compiland = ..\build\intel\mt_obj\ceil.obj

Compiland = ..\build\intel\mt_obj\adj_fdiv.obj

Compiland = ..\build\intel\mt_obj\87tran.obj

Compiland = ..\build\intel\mt_obj\87except.obj

Compiland = ..\build\intel\mt_obj\87disp.obj

Compiland = ..\build\intel\mt_obj\x10fout.obj

Compiland = ..\build\intel\mt_obj\tenpow.obj

Compiland = ..\build\intel\mt_obj\strgtold.obj

Compiland = ..\build\intel\mt_obj\mantold.obj

Compiland = ..\build\intel\mt_obj\intrncvt.obj

Compiland = ..\build\intel\mt_obj\fpinit.obj

Compiland = ..\build\intel\mt_obj\cvt.obj

Compiland = ..\build\intel\mt_obj\constpow.obj

Compiland = ..\build\intel\mt_obj\cfout.obj

Compiland = ..\build\intel\mt_obj\cfin.obj

Compiland = build\intel\mt_obj\time64.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\time64.c

Compiland = build\intel\mt_obj\mktime64.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mktime64.c

Compiland = build\intel\mt_obj\loctim64.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\loctim64.c

Compiland = build\intel\mt_obj\gmtime64.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\gmtime64.c

Compiland = build\intel\mt_obj\tzset.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\tzset.c

Compiland = build\intel\mt_obj\timeset.obj

Compiland = build\intel\mt_obj\time.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\time.c

Compiland = build\intel\mt_obj\strtime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strtime.c

Compiland = build\intel\mt_obj\strftime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strftime.c

Compiland = build\intel\mt_obj\mktime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mktime.c

Compiland = build\intel\mt_obj\localtim.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\localtim.c

Compiland = build\intel\mt_obj\gmtime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\gmtime.c

Compiland = build\intel\mt_obj\dtoxtime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\dtoxtime.c

Compiland = build\intel\mt_obj\difftime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\difftime.c

Compiland = build\intel\mt_obj\days.obj

Compiland = build\intel\mt_obj\wcsncpy.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wcsncpy.c

Compiland = build\intel\mt_obj\wcslen.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wcslen.c

Compiland = build\intel\mt_obj\wcscmp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wcscmp.c

Compiland = build\intel\mt_obj\wcscat.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wcscat.c

Compiland = build\intel\mt_obj\strtok.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strtok.c

Compiland = build\intel\mt_obj\strlwr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strlwr.c

Compiland = build\intel\mt_obj\strstr.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strstr.asm

Compiland = build\intel\mt_obj\strspn.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strspn.asm

Compiland = build\intel\mt_obj\strrchr.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strrchr.asm

Compiland = build\intel\mt_obj\strpbrk.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\Intel\STRSPN.ASM

Compiland = build\intel\mt_obj\_strnicm.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\_strnicm.asm

Compiland = build\intel\mt_obj\strnicmp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strnicmp.c

Compiland = build\intel\mt_obj\strncpy.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strncpy.asm

Compiland = build\intel\mt_obj\strncmp.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strncmp.asm

Compiland = build\intel\mt_obj\strncat.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strncat.asm

Compiland = build\intel\mt_obj\strlen.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strlen.asm

Compiland = build\intel\mt_obj\stricmp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\stricmp.c

Compiland = build\intel\mt_obj\_stricmp.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\_stricmp.asm

Compiland = build\intel\mt_obj\strdup.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strdup.c

Compiland = build\intel\mt_obj\strcspn.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\Intel\STRSPN.ASM

Compiland = build\intel\mt_obj\strcmp.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strcmp.asm

Compiland = build\intel\mt_obj\strchr.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strchr.asm

Compiland = build\intel\mt_obj\strcat.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\strcat.asm

Compiland = build\intel\mt_obj\memset.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\memset.asm

Compiland = build\intel\mt_obj\memmove.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\Intel\MEMCPY.ASM

Compiland = build\intel\mt_obj\memcmp.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\memcmp.asm

Compiland = build\intel\mt_obj\memchr.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\memchr.asm

Compiland = build\intel\mt_obj\memcpy.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\memcpy.asm

Compiland = build\intel\mt_obj\ncommode.obj

Compiland = build\intel\mt_obj\woutput.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\output.c

Compiland = build\intel\mt_obj\vsprintf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\vsprintf.c

Compiland = build\intel\mt_obj\ungetc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\ungetc.c

Compiland = build\intel\mt_obj\swprintf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\swprintf.c

Compiland = build\intel\mt_obj\stream.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\stream.c

Compiland = build\intel\mt_obj\sscanf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\sscanf.c

Compiland = build\intel\mt_obj\sprintf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\sprintf.c

Compiland = build\intel\mt_obj\snprintf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\sprintf.c

Compiland = build\intel\mt_obj\printf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\printf.c

Compiland = build\intel\mt_obj\output.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\output.c

Compiland = build\intel\mt_obj\input.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\input.c

Compiland = build\intel\mt_obj\fwrite.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fwrite.c

Compiland = build\intel\mt_obj\ftell.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\ftell.c

Compiland = build\intel\mt_obj\fseek.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fseek.c

Compiland = build\intel\mt_obj\fscanf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fscanf.c

Compiland = build\intel\mt_obj\fread.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fread.c

Compiland = build\intel\mt_obj\fprintf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fprintf.c

Compiland = build\intel\mt_obj\fopen.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fopen.c

Compiland = build\intel\mt_obj\fflush.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fflush.c

Compiland = build\intel\mt_obj\fclose.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fclose.c

Compiland = build\intel\mt_obj\closeall.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\closeall.c

Compiland = build\intel\mt_obj\_sftbuf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_sftbuf.c

Compiland = build\intel\mt_obj\_open.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_open.c

Compiland = build\intel\mt_obj\_getbuf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_getbuf.c

Compiland = build\intel\mt_obj\_freebuf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_freebuf.c

Compiland = build\intel\mt_obj\_flswbuf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_flsbuf.c

Compiland = build\intel\mt_obj\_flsbuf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_flsbuf.c

Compiland = build\intel\mt_obj\_file.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_file.c

Compiland = build\intel\mt_obj\_filbuf.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_filbuf.c

Compiland = build\intel\mt_obj\fputwc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fputwc.c

Compiland = build\intel\mt_obj\fputs.obj

Compiland = build\intel\mt_obj\fgets.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fgets.c

Compiland = build\intel\mt_obj\fp8.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\intel\fp8.c

Compiland = build\intel\mt_obj\wincrt0.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\crt0.c

Compiland = build\intel\mt_obj\wincmdln.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wincmdln.c

Compiland = build\intel\mt_obj\tidtable.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\tidtable.c

Compiland = build\intel\mt_obj\threadex.obj

Compiland = build\intel\mt_obj\stdenvp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\stdenvp.c

Compiland = build\intel\mt_obj\stdargv.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\stdargv.c

Compiland = build\intel\mt_obj\mlock.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mlock.c

Compiland = build\intel\mt_obj\crt0msg.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\crt0msg.c

Compiland = build\intel\mt_obj\crt0init.obj

Compiland = build\intel\mt_obj\crt0fp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\crt0fp.c

Compiland = build\intel\mt_obj\crt0dat.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\crt0dat.c

Compiland = build\intel\mt_obj\chkstk.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\chkstk.asm

Compiland = ..\build\intel\mt_obj\initsect.obj

Compiland = build\intel\mt_obj\wtombenv.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wtombenv.c

Compiland = build\intel\mt_obj\winxfltr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\winxfltr.c

Compiland = build\intel\mt_obj\winsig.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\winsig.c

Compiland = build\intel\mt_obj\w_loc.obj

Compiland = build\intel\mt_obj\convrtcp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\convrtcp.c

Compiland = build\intel\mt_obj\splitpat.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\splitpat.c

Compiland = build\intel\mt_obj\setlocal.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\setlocal.c

Compiland = build\intel\mt_obj\setenv.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\setenv.c

Compiland = build\intel\mt_obj\rand.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\rand.c

Compiland = build\intel\mt_obj\qsort.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\qsort.c

Compiland = build\intel\mt_obj\purevirt.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\purevirt.c

Compiland = build\intel\mt_obj\onexit.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\onexit.c

Compiland = build\intel\mt_obj\nlsdata3.obj

Compiland = build\intel\mt_obj\nlsdata2.obj

Compiland = build\intel\mt_obj\nlsdata1.obj

Compiland = build\intel\mt_obj\lconv.obj

Compiland = build\intel\mt_obj\labs.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\labs.c

Compiland = build\intel\mt_obj\inittime.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\inittime.c

Compiland = build\intel\mt_obj\initnum.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\initnum.c

Compiland = build\intel\mt_obj\initmon.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\initmon.c

Compiland = build\intel\mt_obj\inithelp.obj

Compiland = build\intel\mt_obj\initctyp.obj

Compiland = build\intel\mt_obj\initcrit.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\initcrit.c

Compiland = build\intel\mt_obj\initcoll.obj

Compiland = build\intel\mt_obj\getqloc.obj

Compiland = build\intel\mt_obj\getenv.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\getenv.c

Compiland = build\intel\mt_obj\ctype.obj

Compiland = build\intel\mt_obj\crtmbox.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\crtmbox.c

Compiland = build\intel\mt_obj\cmiscdat.obj

Compiland = build\intel\mt_obj\abort.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\abort.c

Compiland = build\intel\mt_obj\a_str.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\a_str.c

Compiland = build\intel\mt_obj\a_map.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\a_map.c

Compiland = build\intel\mt_obj\a_loc.obj

Compiland = build\intel\mt_obj\a_env.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\a_env.c

Compiland = build\intel\mt_obj\a_cmp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\a_cmp.c

Compiland = build\intel\mt_obj\sehprolg.obj

Compiland = build\intel\mt_obj\secfail.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\secfail.c

Compiland = build\intel\mt_obj\seccook.obj

Compiland = build\intel\mt_obj\seccinit.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\seccinit.c

Compiland = build\intel\mt_obj\secchk.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\secchk.c

Compiland = build\intel\mt_obj\exsup3.obj

Compiland = build\intel\mt_obj\exsup.obj

Compiland = build\intel\mt_obj\eh3valid.obj

Compiland = build\intel\mt_obj\mbsupr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsupr.c

Compiland = build\intel\mt_obj\mbsstr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsstr.c

Compiland = build\intel\mt_obj\mbsspn.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsspn.c

Compiland = build\intel\mt_obj\mbsrchr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsrchr.c

Compiland = build\intel\mt_obj\mbspbrk.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbscspn.c

Compiland = build\intel\mt_obj\mbsnbico.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsnbico.c

Compiland = build\intel\mt_obj\mbsnbicm.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsnbicm.c

Compiland = build\intel\mt_obj\mbsnbcpy.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsnbcpy.c

Compiland = build\intel\mt_obj\mbsnbcmp.obj

Compiland = build\intel\mt_obj\mbsinc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbsinc.c

Compiland = build\intel\mt_obj\mbsdec.obj

Compiland = build\intel\mt_obj\mbscspn.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbscspn.c

Compiland = build\intel\mt_obj\mbscmp.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbscmp.c

Compiland = build\intel\mt_obj\mbschr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbschr.c

Compiland = build\intel\mt_obj\mbctype.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbctype.c

Compiland = build\intel\mt_obj\ismbspc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\ismbspc.c

Compiland = build\intel\mt_obj\ismbdgt.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\ismbdgt.c

Compiland = build\intel\mt_obj\ismbbyte.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\ismbbyte.c

Compiland = build\intel\mt_obj\write.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\write.c

Compiland = build\intel\mt_obj\txtmode.obj

Compiland = build\intel\mt_obj\setmode.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\setmode.c

Compiland = build\intel\mt_obj\read.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\read.c

Compiland = build\intel\mt_obj\osfinfo.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\osfinfo.c

Compiland = build\intel\mt_obj\open.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\open.c

Compiland = build\intel\mt_obj\lseeki64.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\lseeki64.c

Compiland = build\intel\mt_obj\lseek.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\lseek.c

Compiland = build\intel\mt_obj\isatty.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\isatty.c

Compiland = build\intel\mt_obj\ioinit.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\ioinit.c

Compiland = build\intel\mt_obj\commit.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\commit.c

Compiland = build\intel\mt_obj\close.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\close.c

Compiland = build\intel\mt_obj\chsize.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\chsize.c

Compiland = build\intel\mt_obj\ulldvrm.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\ulldvrm.asm

Compiland = build\intel\mt_obj\ulldiv.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\ulldiv.asm

Compiland = build\intel\mt_obj\llshr.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\llshr.asm

Compiland = build\intel\mt_obj\llrem.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\llrem.asm

Compiland = build\intel\mt_obj\llmul.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\llmul.asm

Compiland = build\intel\mt_obj\lldiv.obj
    F:\VS70Builds\3077\vc\crtbld\crt\src\intel\lldiv.asm

Compiland = build\intel\mt_obj\_newmode.obj

Compiland = build\intel\mt_obj\handler.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\handler.cpp

Compiland = build\intel\mt_obj\sbheap.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\sbheap.c

Compiland = build\intel\mt_obj\realloc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\realloc.c

Compiland = build\intel\mt_obj\msize.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\msize.c

Compiland = build\intel\mt_obj\malloc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\malloc.c

Compiland = build\intel\mt_obj\heapinit.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\heapinit.c

Compiland = build\intel\mt_obj\free.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\free.c

Compiland = build\intel\mt_obj\expand.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\expand.c

Compiland = build\intel\mt_obj\calloc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\calloc.c

Compiland = build\intel\mt_obj\resetstk.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\resetstk.c

Compiland = ..\build\intel\mt_obj\trnsctrl.obj

Compiland = ..\build\intel\mt_obj\lowhelpr.obj

Compiland = ..\build\intel\mt_obj\ehprolog.obj

Compiland = ..\build\intel\mt_obj\validate.obj

Compiland = ..\build\intel\mt_obj\user.obj

Compiland = ..\build\intel\mt_obj\unhandld.obj

Compiland = ..\build\intel\mt_obj\typinfo.obj

Compiland = ..\build\intel\mt_obj\stdexcpt.obj

Compiland = ..\build\intel\mt_obj\throw.obj

Compiland = ..\build\intel\mt_obj\hooks.obj

Compiland = ..\build\intel\mt_obj\frame.obj

Compiland = ..\build\intel\mt_obj\ehvecdtr.obj

Compiland = ..\build\intel\mt_obj\ehvecctr.obj

Compiland = build\intel\mt_obj\rename.obj

Compiland = build\intel\mt_obj\getcwd.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\getcwd.c

Compiland = build\intel\mt_obj\fullpath.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\fullpath.c

Compiland = build\intel\mt_obj\dosmap.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\dosmap.c

Compiland = build\intel\mt_obj\findfile.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\findfile.c

Compiland = build\intel\mt_obj\xtoa.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\xtoa.c

Compiland = build\intel\mt_obj\wctomb.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\wctomb.c

Compiland = build\intel\mt_obj\toupper.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\toupper.c

Compiland = build\intel\mt_obj\tolower.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\tolower.c

Compiland = build\intel\mt_obj\strtol.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\strtol.c

Compiland = build\intel\mt_obj\mbtowc.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\mbtowc.c

Compiland = build\intel\mt_obj\isctype.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\isctype.c

Compiland = build\intel\mt_obj\atox.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\atox.c

Compiland = build\intel\mt_obj\atof.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\atof.c

Compiland = build\intel\mt_obj\_fptostr.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_fptostr.c

Compiland = build\intel\mt_obj\_ctype.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\_ctype.c

Compiland = KERNEL32.dll

Compiland = USER32.dll

Compiland = GDI32.dll

Compiland = comdlg32.dll

Compiland = WINSPOOL.DRV

Compiland = ADVAPI32.dll

Compiland = SHELL32.dll

Compiland = COMCTL32.dll

Compiland = SHLWAPI.dll

Compiland = obj\i386\oledbiid.obj

Compiland = obj\i386\ieguids.obj

Compiland = obj\i386\docobj_i.obj

Compiland = obj\i386\oledbdat.obj

Compiland = obj\i386\vcguids.obj

Compiland = obj\i386\cguid_i.obj

Compiland = obj\i386\unknwn_i.obj

Compiland = obj\i386\oleidl_i.obj

Compiland = obj\i386\ocidl_i.obj

Compiland = obj\i386\objidl_i.obj

Compiland = obj\i386\oaidl_i.obj

Compiland = oledlg.dll

Compiland = ole32.dll

Compiland = OLEAUT32.dll

Compiland = build\intel\mt_obj\string.obj
    f:\vs70builds\3077\vc\crtbld\crt\src\string.cpp

Compiland = build\intel\st_obj\oldnames\itoa.obj

Compiland = build\intel\st_obj\oldnames\stricmp.obj

Compiland = build\intel\st_obj\oldnames\strlwr.obj

Compiland = build\intel\st_obj\oldnames\strnicmp.obj

Compiland = ODBC32.dll

Compiland = WINMM.dll

Compiland = WS2_32.dll

Compiland = Release\comsupp.obj

Compiland = Release\comraise.obj

Compiland = Release\comutil.obj

Compiland = Release\invkprxy.obj

Compiland = Release\invkerr.obj

Compiland = dbghelp.dll

Compiland = PSAPI.DLL

Compiland = INTEL\Release\atlbase.obj
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\include\atlsimpcoll.h
    f:\vs70builds\3077\vc\mfcatl\ship\atlmfc\src\atl\atls\atlbase.cpp

Compiland = MSWSOCK.dll

Compiland = OLEACC.dll

Compiland = * Linker *




DOWNLOAD LINK FOR MATCHSERVER DUMP + MATCHING EXE
 
Junior Spellweaver
Joined
Jan 3, 2007
Messages
145
Reaction score
27
rofl nice release, i have now the addresses of locator, matchagent, july matchserver and kGunZ exe
 
Custom Title Activated
Loyal Member
Joined
Nov 5, 2006
Messages
1,358
Reaction score
15
Nice work dude, i'm impressed, even tho my opinion doesnt count as much as Vicio or Lambda
 
Supreme Arcanarch
Loyal Member
Joined
Dec 21, 2006
Messages
957
Reaction score
0
The dll isn't too bad I guess, though people should really work on their client-side stuff so people can't hack anyway :p

As for the dumps, I don't see how more people don't have them anyway. Just get the PDB files and run them through dia2dump to get all the functions and stuff from them.
 
Initiate Mage
Joined
Aug 21, 2007
Messages
3
Reaction score
0
Thanks For This Alsome Release. I Just Need To Compile This.
 
Supreme Arcanarch
Loyal Member
Joined
Jun 13, 2007
Messages
946
Reaction score
2
Sorry for noobish, but what is this for? '-'
This is the source of match server.... i think....
after you learn C++, you will know. If you dont, no problem, download visual studio C++ then pack the files.
 
Supreme Arcanarch
Loyal Member
Joined
Dec 21, 2006
Messages
957
Reaction score
0
It's not the source code, just a bunch of addresses and method definitions.
 
Junior Spellweaver
Joined
Jan 1, 2007
Messages
100
Reaction score
1


cant download , please upload other link
thankssss
 
Junior Spellweaver
Joined
Jan 1, 2007
Messages
100
Reaction score
1
please release your dll inject tool ....
 
Status
Not open for further replies.
Back
Top