1 |
|
#include "Daodan_Patch.h" |
2 |
< |
#include "Daodan_Utility.h" |
2 |
> |
#include "Patches/Utility.h" |
3 |
|
#include <beaengine/BeaEngine.h> |
4 |
|
|
5 |
|
#include <windows.h> |
279 |
|
return false; |
280 |
|
} |
281 |
|
|
282 |
– |
bool DDrPatch__strdup(int* dest, const char* value) |
283 |
– |
{ |
284 |
– |
DWORD oldp; |
285 |
– |
|
286 |
– |
if (VirtualProtect(dest, 4, PAGE_EXECUTE_READWRITE, &oldp)) |
287 |
– |
{ |
288 |
– |
*dest = (int)_strdup(value); |
289 |
– |
VirtualProtect(dest, 4, oldp, &oldp); |
290 |
– |
return true; |
291 |
– |
} |
292 |
– |
else |
293 |
– |
return false; |
294 |
– |
} |
295 |
– |
|
282 |
|
bool DDrPatch_NOOP(char* dest, unsigned int length) |
283 |
|
{ |
284 |
|
DWORD oldp; |
292 |
|
else |
293 |
|
return false; |
294 |
|
} |
295 |
+ |
|
296 |
+ |
|
297 |
+ |
void DDrPatch_PrintDisasm(void* addr, int instLimit, int sizeLimit) |
298 |
+ |
{ |
299 |
+ |
DISASM MyDisasm; |
300 |
+ |
int len = 0; |
301 |
+ |
int size = 0; |
302 |
+ |
int i = 0; |
303 |
+ |
|
304 |
+ |
memset(&MyDisasm, 0, sizeof(DISASM)); |
305 |
+ |
|
306 |
+ |
MyDisasm.EIP = (UIntPtr) addr; |
307 |
+ |
|
308 |
+ |
STARTUPMESSAGE("", 0); |
309 |
+ |
STARTUPMESSAGE("Disassembly @ 0x%06x", addr); |
310 |
+ |
|
311 |
+ |
if (sizeLimit <= 0) |
312 |
+ |
sizeLimit = 20 * instLimit; |
313 |
+ |
|
314 |
+ |
while ((i < instLimit) && (size < sizeLimit)) { |
315 |
+ |
len = Disasm(&MyDisasm); |
316 |
+ |
if (len != UNKNOWN_OPCODE) { |
317 |
+ |
size += len; |
318 |
+ |
STARTUPMESSAGE(" %s, Opcode: 0x%x, len: %d, branch: %d, to: 0x%06x", MyDisasm.CompleteInstr, MyDisasm.Instruction.Opcode, len, MyDisasm.Instruction.BranchType, MyDisasm.Instruction.AddrValue); |
319 |
+ |
STARTUPMESSAGE(" Cat: 0x%04x, prefix count: %d", MyDisasm.Instruction.Category & 0xffff, MyDisasm.Prefix.Number ); |
320 |
+ |
|
321 |
+ |
MyDisasm.EIP += (UIntPtr)len; |
322 |
+ |
i++; |
323 |
+ |
} |
324 |
+ |
}; |
325 |
+ |
|
326 |
+ |
STARTUPMESSAGE("", 0); |
327 |
+ |
} |
328 |
+ |
|