mirror of
https://github.com/x64dbg/x64dbg.git
synced 2025-03-01 09:26:19 +00:00
DBG: added various useful functions
This commit is contained in:
parent
0bd3792da3
commit
12979f33ca
@ -42,6 +42,11 @@ static bool sectionfromaddr(duint addr, char* section)
|
||||
|
||||
void dbgfunctionsinit()
|
||||
{
|
||||
_dbgfunctions.DbgAssembleAtEx=assembleat;
|
||||
_dbgfunctions.DbgSectionFromAddr=sectionfromaddr;
|
||||
_dbgfunctions.AssembleAtEx=assembleat;
|
||||
_dbgfunctions.SectionFromAddr=sectionfromaddr;
|
||||
_dbgfunctions.ModNameFromAddr=modnamefromaddr;
|
||||
_dbgfunctions.ModBaseFromAddr=modbasefromaddr;
|
||||
_dbgfunctions.ModBaseFromName=modbasefromname;
|
||||
_dbgfunctions.ModSizeFromAddr=modsizefromaddr;
|
||||
_dbgfunctions.Assemble=assemble;
|
||||
}
|
@ -1,13 +1,23 @@
|
||||
#ifndef _DBGFUNCTIONS_H
|
||||
#define _DBGFUNCTIONS_H
|
||||
|
||||
typedef bool (*DBGASSEMBLEATEX)(duint addr, const char* instruction, char* error, bool fillnop);
|
||||
typedef bool (*DBGSECTIONFROMADDR)(duint addr, char* section);
|
||||
typedef bool (*ASSEMBLEATEX)(duint addr, const char* instruction, char* error, bool fillnop);
|
||||
typedef bool (*SECTIONFROMADDR)(duint addr, char* section);
|
||||
typedef bool (*MODNAMEFROMADDR)(uint addr, char* modname, bool extension);
|
||||
typedef duint (*MODBASEFROMADDR)(uint addr);
|
||||
typedef duint (*MODBASEFROMNAME)(const char* modname);
|
||||
typedef duint (*MODSIZEFROMADDR)(uint addr);
|
||||
typedef bool (*ASSEMBLE)(uint addr, unsigned char* dest, int* size, const char* instruction, char* error);
|
||||
|
||||
struct DBGFUNCTIONS
|
||||
{
|
||||
DBGASSEMBLEATEX DbgAssembleAtEx;
|
||||
DBGSECTIONFROMADDR DbgSectionFromAddr;
|
||||
ASSEMBLEATEX AssembleAtEx;
|
||||
SECTIONFROMADDR SectionFromAddr;
|
||||
MODNAMEFROMADDR ModNameFromAddr;
|
||||
MODBASEFROMADDR ModBaseFromAddr;
|
||||
MODBASEFROMNAME ModBaseFromName;
|
||||
MODSIZEFROMADDR ModSizeFromAddr;
|
||||
ASSEMBLE Assemble;
|
||||
};
|
||||
|
||||
#ifdef BUILD_DBG
|
||||
|
@ -181,6 +181,14 @@ uint modbasefromname(const char* modname)
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint modsizefromaddr(uint addr)
|
||||
{
|
||||
const ModulesInfo::iterator found=modinfo.find(Range(addr, addr));
|
||||
if(found==modinfo.end()) //not found
|
||||
return 0;
|
||||
return found->second.size;
|
||||
}
|
||||
|
||||
///api functions
|
||||
bool apienumexports(uint base, EXPORTENUMCALLBACK cbEnum)
|
||||
{
|
||||
|
@ -124,6 +124,7 @@ uint modbasefromaddr(uint addr);
|
||||
uint modhashfromva(uint va);
|
||||
uint modhashfromname(const char* mod);
|
||||
uint modbasefromname(const char* modname);
|
||||
uint modsizefromaddr(uint addr);
|
||||
|
||||
bool apienumexports(uint base, EXPORTENUMCALLBACK cbEnum);
|
||||
|
||||
|
@ -17,7 +17,7 @@ static bool cbUnknown(const char* text, ULONGLONG* value)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool assembleat(uint addr, const char* instruction, char* error, bool fillnop)
|
||||
bool assemble(uint addr, unsigned char* dest, int* size, const char* instruction, char* error)
|
||||
{
|
||||
if(strlen(instruction)>=XEDPARSE_MAXBUFSIZE)
|
||||
return false;
|
||||
@ -38,8 +38,21 @@ bool assembleat(uint addr, const char* instruction, char* error, bool fillnop)
|
||||
return false;
|
||||
}
|
||||
|
||||
if(dest)
|
||||
memcpy(dest, parse.dest, parse.dest_size);
|
||||
if(size)
|
||||
*size=parse.dest_size;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool assembleat(uint addr, const char* instruction, char* error, bool fillnop)
|
||||
{
|
||||
int destSize;
|
||||
unsigned char dest[16];
|
||||
if(!assemble(addr, dest, &destSize, instruction, error))
|
||||
return false;
|
||||
//calculate the number of NOPs to insert
|
||||
int destSize=parse.dest_size;
|
||||
int origLen=disasmgetsize(addr);
|
||||
while(origLen<destSize)
|
||||
origLen+=disasmgetsize(addr+origLen);
|
||||
@ -47,7 +60,7 @@ bool assembleat(uint addr, const char* instruction, char* error, bool fillnop)
|
||||
unsigned char nops[16];
|
||||
memset(nops, 0x90, sizeof(nops));
|
||||
|
||||
bool ret=memwrite(fdProcessInfo->hProcess, (void*)addr, parse.dest, destSize, 0);
|
||||
bool ret=memwrite(fdProcessInfo->hProcess, (void*)addr, dest, destSize, 0);
|
||||
if(ret && fillnop && nopsize)
|
||||
if(!memwrite(fdProcessInfo->hProcess, (void*)(addr+destSize), nops, nopsize, 0))
|
||||
ret=false;
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include "_global.h"
|
||||
|
||||
bool assemble(uint addr, unsigned char* dest, int* size, const char* instruction, char* error);
|
||||
bool assembleat(uint addr, const char* instruction, char* error, bool fillnop);
|
||||
|
||||
#endif // _ASSEMBLE_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user