--- Daodan/src/Daodan_Patch.c 2014/04/06 17:06:02 993 +++ Daodan/src/Daodan_Patch.c 2014/04/07 10:33:27 994 @@ -1,5 +1,5 @@ #include "Daodan_Patch.h" -#include "Daodan_Utility.h" +#include "Patches/Utility.h" #include #include @@ -279,20 +279,6 @@ bool DDrPatch_Int16(short* dest, unsigne return false; } -bool DDrPatch__strdup(int* dest, const char* value) -{ - DWORD oldp; - - if (VirtualProtect(dest, 4, PAGE_EXECUTE_READWRITE, &oldp)) - { - *dest = (int)_strdup(value); - VirtualProtect(dest, 4, oldp, &oldp); - return true; - } - else - return false; -} - bool DDrPatch_NOOP(char* dest, unsigned int length) { DWORD oldp; @@ -306,3 +292,37 @@ bool DDrPatch_NOOP(char* dest, unsigned else return false; } + + +void DDrPatch_PrintDisasm(void* addr, int instLimit, int sizeLimit) +{ + DISASM MyDisasm; + int len = 0; + int size = 0; + int i = 0; + + memset(&MyDisasm, 0, sizeof(DISASM)); + + MyDisasm.EIP = (UIntPtr) addr; + + STARTUPMESSAGE("", 0); + STARTUPMESSAGE("Disassembly @ 0x%06x", addr); + + if (sizeLimit <= 0) + sizeLimit = 20 * instLimit; + + while ((i < instLimit) && (size < sizeLimit)) { + len = Disasm(&MyDisasm); + if (len != UNKNOWN_OPCODE) { + size += len; + STARTUPMESSAGE(" %s, Opcode: 0x%x, len: %d, branch: %d, to: 0x%06x", MyDisasm.CompleteInstr, MyDisasm.Instruction.Opcode, len, MyDisasm.Instruction.BranchType, MyDisasm.Instruction.AddrValue); + STARTUPMESSAGE(" Cat: 0x%04x, prefix count: %d", MyDisasm.Instruction.Category & 0xffff, MyDisasm.Prefix.Number ); + + MyDisasm.EIP += (UIntPtr)len; + i++; + } + }; + + STARTUPMESSAGE("", 0); +} +