1
0
Fork 0

Merged in RaMMicHaeL/x64_dbg (pull request #4)

C support for public header files
This commit is contained in:
mrexodia 2014-07-11 19:32:46 +02:00
commit 88e251e3cc
3 changed files with 143 additions and 131 deletions

View File

@ -3,6 +3,10 @@
#include <windows.h>
#ifndef __cplusplus
#include <stdbool.h>
#endif
//default structure alignments forced
#ifdef _WIN64
#pragma pack(push, 16)
@ -62,15 +66,15 @@ BRIDGE_IMPEXP int BridgeGetDbgVersion();
#define MAX_MNEMONIC_SIZE 64
//Debugger enums
enum DBGSTATE
typedef enum
{
initialized,
paused,
running,
stopped
};
} DBGSTATE;
enum SEGMENTREG
typedef enum
{
SEG_DEFAULT,
SEG_ES,
@ -79,9 +83,9 @@ enum SEGMENTREG
SEG_GS,
SEG_CS,
SEG_SS
};
} SEGMENTREG;
enum ADDRINFOFLAGS
typedef enum
{
flagmodule=1,
flaglabel=2,
@ -89,35 +93,35 @@ enum ADDRINFOFLAGS
flagbookmark=8,
flagfunction=16,
flagloop=32
};
} ADDRINFOFLAGS;
enum BPXTYPE
typedef enum
{
bp_none=0,
bp_normal=1,
bp_hardware=2,
bp_memory=4
};
} BPXTYPE;
enum FUNCTYPE
typedef enum
{
FUNC_NONE,
FUNC_BEGIN,
FUNC_MIDDLE,
FUNC_END,
FUNC_SINGLE
};
} FUNCTYPE;
enum LOOPTYPE
typedef enum
{
LOOP_NONE,
LOOP_BEGIN,
LOOP_MIDDLE,
LOOP_ENTRY,
LOOP_END
};
} LOOPTYPE;
enum DBGMSG
typedef enum
{
DBG_SCRIPT_LOAD, // param1=const char* filename, param2=unused
DBG_SCRIPT_UNLOAD, // param1=unused, param2=unused
@ -159,18 +163,18 @@ enum DBGMSG
DBG_DELETE_AUTO_FUNCTION_RANGE, // param1=duint start, param2=duint end
DBG_GET_STRING_AT, // param1=duint addr, param2=unused
DBG_GET_FUNCTIONS // param1=unused, param2=unused
};
} DBGMSG;
enum SCRIPTLINETYPE
typedef enum
{
linecommand,
linebranch,
linelabel,
linecomment,
lineempty,
};
} SCRIPTLINETYPE;
enum SCRIPTBRANCHTYPE
typedef enum
{
scriptnobranch,
scriptjmp,
@ -181,29 +185,29 @@ enum SCRIPTBRANCHTYPE
scriptjbejle,
scriptjaejge,
scriptcall
};
} SCRIPTBRANCHTYPE;
enum DISASM_INSTRTYPE
typedef enum
{
instr_normal,
instr_branch,
instr_stack
};
} DISASM_INSTRTYPE;
enum DISASM_ARGTYPE
typedef enum
{
arg_normal,
arg_memory
};
} DISASM_ARGTYPE;
enum STRING_TYPE
typedef enum
{
str_none,
str_ascii,
str_unicode
};
} STRING_TYPE;
enum THREADPRIORITY
typedef enum
{
_PriorityIdle = -15,
_PriorityAboveNormal = 1,
@ -213,9 +217,9 @@ enum THREADPRIORITY
_PriorityNormal = 0,
_PriorityTimeCritical = 15,
_PriorityUnknown = 0x7FFFFFFF
};
} THREADPRIORITY;
enum THREADWAITREASON
typedef enum
{
_Executive = 0,
_FreePage = 1,
@ -254,37 +258,37 @@ enum THREADWAITREASON
_WrFastMutex = 34,
_WrGuardedMutex = 35,
_WrRundown = 36,
};
} THREADWAITREASON;
enum MEMORY_SIZE
typedef enum
{
size_byte,
size_word,
size_dword,
size_qword
};
} MEMORY_SIZE;
//Debugger typedefs
typedef MEMORY_SIZE VALUE_SIZE;
struct SYMBOLINFO;
struct DBGFUNCTIONS;
typedef struct SYMBOLINFO_ SYMBOLINFO;
typedef struct DBGFUNCTIONS_ DBGFUNCTIONS;
typedef void (*CBSYMBOLENUM)(SYMBOLINFO* symbol, void* user);
//Debugger structs
struct MEMPAGE
typedef struct
{
MEMORY_BASIC_INFORMATION mbi;
char info[MAX_MODULE_SIZE];
};
} MEMPAGE;
struct MEMMAP
typedef struct
{
int count;
MEMPAGE* page;
};
} MEMMAP;
struct BRIDGEBP
typedef struct
{
BPXTYPE type;
duint addr;
@ -294,28 +298,28 @@ struct BRIDGEBP
char name[MAX_BREAKPOINT_SIZE];
char mod[MAX_MODULE_SIZE];
unsigned short slot;
};
} BRIDGEBP;
struct BPMAP
typedef struct
{
int count;
BRIDGEBP* bp;
};
} BPMAP;
struct FUNCTION
typedef struct
{
duint start; //OUT
duint end; //OUT
};
} FUNCTION;
struct LOOP
typedef struct
{
int depth; //IN
duint start; //OUT
duint end; //OUT
};
} LOOP;
struct ADDRINFO
typedef struct
{
int flags; //ADDRINFOFLAGS (IN)
char module[MAX_MODULE_SIZE]; //module the address is in
@ -324,29 +328,29 @@ struct ADDRINFO
bool isbookmark;
FUNCTION function;
LOOP loop;
};
} ADDRINFO;
struct SYMBOLINFO
struct SYMBOLINFO_
{
duint addr;
char* decoratedSymbol;
char* undecoratedSymbol;
};
struct SYMBOLMODULEINFO
typedef struct
{
duint base;
char name[MAX_MODULE_SIZE];
};
} SYMBOLMODULEINFO;
struct SYMBOLCBINFO
typedef struct
{
duint base;
CBSYMBOLENUM cbSymbolEnum;
void* user;
};
} SYMBOLCBINFO;
struct FLAGS
typedef struct
{
bool c;
bool p;
@ -357,9 +361,9 @@ struct FLAGS
bool i;
bool d;
bool o;
};
} FLAGS;
struct REGDUMP
typedef struct
{
duint cax;
duint ccx;
@ -394,9 +398,9 @@ struct REGDUMP
duint dr3;
duint dr6;
duint dr7;
};
} REGDUMP;
struct DISASM_ARG
typedef struct
{
DISASM_ARGTYPE type;
SEGMENTREG segment;
@ -404,24 +408,24 @@ struct DISASM_ARG
duint constant;
duint value;
duint memvalue;
};
} DISASM_ARG;
struct DISASM_INSTR
typedef struct
{
char instruction[64];
DISASM_INSTRTYPE type;
int argcount;
int instr_size;
DISASM_ARG arg[3];
};
} DISASM_INSTR;
struct STACK_COMMENT
typedef struct
{
char color[8]; //hex color-code
char comment[MAX_COMMENT_SIZE];
};
} STACK_COMMENT;
struct THREADINFO
typedef struct
{
int ThreadNumber;
HANDLE hThread;
@ -429,9 +433,9 @@ struct THREADINFO
duint ThreadStartAddress;
duint ThreadLocalBase;
char threadName[MAX_THREAD_NAME_SIZE];
};
} THREADINFO;
struct THREADALLINFO
typedef struct
{
THREADINFO BasicInfo;
duint ThreadCip;
@ -439,29 +443,29 @@ struct THREADALLINFO
THREADPRIORITY Priority;
THREADWAITREASON WaitReason;
DWORD LastError;
};
} THREADALLINFO;
struct THREADLIST
typedef struct
{
int count;
THREADALLINFO* list;
int CurrentThread;
};
} THREADLIST;
struct MEMORY_INFO
typedef struct
{
ULONG_PTR value; //displacement / addrvalue (rip-relative)
MEMORY_SIZE size; //byte/word/dword/qword
char mnemonic[MAX_MNEMONIC_SIZE];
};
} MEMORY_INFO;
struct VALUE_INFO
typedef struct
{
ULONG_PTR value;
VALUE_SIZE size;
};
} VALUE_INFO;
struct BASIC_INSTRUCTION_INFO
typedef struct
{
DWORD type; //value|memory|addr
VALUE_INFO value; //immediat
@ -471,23 +475,23 @@ struct BASIC_INSTRUCTION_INFO
bool call; //instruction is a call
int size;
char instruction[MAX_MNEMONIC_SIZE*4];
};
} BASIC_INSTRUCTION_INFO;
struct SCRIPTBRANCH
typedef struct
{
SCRIPTBRANCHTYPE type;
int dest;
char branchlabel[256];
};
} SCRIPTBRANCH;
struct FUNCTION_LOOP_INFO
typedef struct
{
duint addr;
duint start;
duint end;
bool manual;
int depth;
};
} FUNCTION_LOOP_INFO;
//Debugger functions
BRIDGE_IMPEXP const char* DbgInit();
@ -569,7 +573,7 @@ BRIDGE_IMPEXP const DBGFUNCTIONS* DbgFunctions();
#define GUI_MAX_LINE_SIZE 65536
//Gui enums
enum GUIMSG
typedef enum
{
GUI_DISASSEMBLE_AT, // param1=(duint)va, param2=(duint)cip
GUI_SET_DEBUG_STATE, // param1=(DBGSTATE)state, param2=unused
@ -624,21 +628,21 @@ enum GUIMSG
GUI_UPDATE_SIDEBAR, // param1=unused, param2=unused
GUI_REPAINT_TABLE_VIEW, // param1=unused, param2=unused
GUI_UPDATE_PATCHES // param1=unused, param2=unused
};
} GUIMSG;
//GUI structures
struct CELLINFO
typedef struct
{
int row;
int col;
const char* str;
};
} CELLINFO;
struct SELECTIONDATA
typedef struct
{
duint start;
duint end;
};
} SELECTIONDATA;
//GUI functions
BRIDGE_IMPEXP void GuiDisasmAt(duint addr, duint cip);

View File

@ -1,13 +1,17 @@
#ifndef _DBGFUNCTIONS_H
#define _DBGFUNCTIONS_H
struct DBGPATCHINFO
#ifndef __cplusplus
#include <stdbool.h>
#endif
typedef struct
{
char mod[MAX_MODULE_SIZE];
duint addr;
unsigned char oldbyte;
unsigned char newbyte;
};
} DBGPATCHINFO;
typedef bool (*ASSEMBLEATEX)(duint addr, const char* instruction, char* error, bool fillnop);
typedef bool (*SECTIONFROMADDR)(duint addr, char* section);
@ -28,7 +32,7 @@ typedef int (*MODPATHFROMNAME)(const char* modname, char* path, int size);
typedef bool (*DISASMFAST)(unsigned char* data, duint addr, BASIC_INSTRUCTION_INFO* basicinfo);
typedef void (*MEMUPDATEMAP)(HANDLE hProcess);
struct DBGFUNCTIONS
typedef struct DBGFUNCTIONS_
{
ASSEMBLEATEX AssembleAtEx;
SECTIONFROMADDR SectionFromAddr;
@ -48,7 +52,7 @@ struct DBGFUNCTIONS
MODPATHFROMNAME ModPathFromName;
DISASMFAST DisasmFast;
MEMUPDATEMAP MemUpdateMap;
};
} DBGFUNCTIONS;
#ifdef BUILD_DBG

View File

@ -1,6 +1,10 @@
#ifndef _PLUGINS_H
#define _PLUGINS_H
#ifndef __cplusplus
#include <stdbool.h>
#endif
#ifndef PLUG_IMPEXP
#ifdef BUILD_DBG
#define PLUG_IMPEXP __declspec(dllexport)
@ -22,7 +26,7 @@
#define PLUG_SDKVERSION 1
//structures
struct PLUG_INITSTRUCT
typedef struct
{
//provided by the debugger
int pluginHandle;
@ -30,120 +34,120 @@ struct PLUG_INITSTRUCT
int sdkVersion;
int pluginVersion;
char pluginName[256];
};
} PLUG_INITSTRUCT;
struct PLUG_SETUPSTRUCT
typedef struct
{
//provided by the debugger
HWND hwndDlg; //gui window handle
int hMenu; //plugin menu handle
};
} PLUG_SETUPSTRUCT;
//callback structures
struct PLUG_CB_INITDEBUG
typedef struct
{
const char* szFileName;
};
} PLUG_CB_INITDEBUG;
struct PLUG_CB_STOPDEBUG
typedef struct
{
void* reserved;
};
} PLUG_CB_STOPDEBUG;
struct PLUG_CB_CREATEPROCESS
typedef struct
{
CREATE_PROCESS_DEBUG_INFO* CreateProcessInfo;
IMAGEHLP_MODULE64* modInfo;
const char* DebugFileName;
PROCESS_INFORMATION* fdProcessInfo;
};
} PLUG_CB_CREATEPROCESS;
struct PLUG_CB_EXITPROCESS
typedef struct
{
EXIT_PROCESS_DEBUG_INFO* ExitProcess;
};
} PLUG_CB_EXITPROCESS;
struct PLUG_CB_CREATETHREAD
typedef struct
{
CREATE_THREAD_DEBUG_INFO* CreateThread;
DWORD dwThreadId;
};
} PLUG_CB_CREATETHREAD;
struct PLUG_CB_EXITTHREAD
typedef struct
{
EXIT_THREAD_DEBUG_INFO* ExitThread;
DWORD dwThreadId;
};
} PLUG_CB_EXITTHREAD;
struct PLUG_CB_SYSTEMBREAKPOINT
typedef struct
{
void* reserved;
};
} PLUG_CB_SYSTEMBREAKPOINT;
struct PLUG_CB_LOADDLL
typedef struct
{
LOAD_DLL_DEBUG_INFO* LoadDll;
IMAGEHLP_MODULE64* modInfo;
const char* modname;
};
} PLUG_CB_LOADDLL;
struct PLUG_CB_UNLOADDLL
typedef struct
{
UNLOAD_DLL_DEBUG_INFO* UnloadDll;
};
} PLUG_CB_UNLOADDLL;
struct PLUG_CB_OUTPUTDEBUGSTRING
typedef struct
{
OUTPUT_DEBUG_STRING_INFO* DebugString;
};
} PLUG_CB_OUTPUTDEBUGSTRING;
struct PLUG_CB_EXCEPTION
typedef struct
{
EXCEPTION_DEBUG_INFO* Exception;
};
} PLUG_CB_EXCEPTION;
struct PLUG_CB_BREAKPOINT
typedef struct
{
BRIDGEBP* breakpoint;
};
} PLUG_CB_BREAKPOINT;
struct PLUG_CB_PAUSEDEBUG
typedef struct
{
void* reserved;
};
} PLUG_CB_PAUSEDEBUG;
struct PLUG_CB_RESUMEDEBUG
typedef struct
{
void* reserved;
};
} PLUG_CB_RESUMEDEBUG;
struct PLUG_CB_STEPPED
typedef struct
{
void* reserved;
};
} PLUG_CB_STEPPED;
struct PLUG_CB_ATTACH
typedef struct
{
DWORD dwProcessId;
};
} PLUG_CB_ATTACH;
struct PLUG_CB_DETACH
typedef struct
{
PROCESS_INFORMATION* fdProcessInfo;
};
} PLUG_CB_DETACH;
struct PLUG_CB_DEBUGEVENT
typedef struct
{
DEBUG_EVENT* DebugEvent;
};
} PLUG_CB_DEBUGEVENT;
struct PLUG_CB_MENUENTRY
typedef struct
{
int hEntry;
};
} PLUG_CB_MENUENTRY;
//enums
enum CBTYPE
typedef enum
{
CB_INITDEBUG, //PLUG_CB_INITDEBUG
CB_STOPDEBUG, //PLUG_CB_STOPDEBUG
@ -164,7 +168,7 @@ enum CBTYPE
CB_DETACH, //PLUG_CB_DETACH (before detaching, before CB_STOPDEBUG)
CB_DEBUGEVENT, //PLUG_CB_DEBUGEVENT (called on any debug event)
CB_MENUENTRY //PLUG_CB_MENUENTRY
};
} CBTYPE;
//typedefs
typedef void (*CBPLUGIN)(CBTYPE cbType, void* callbackInfo);