DBG: added _dbg_memisvalidreadptr export

BRIDGE: added DbgMemIsValidReadPtr
BRIDGE: compatible with MSVC
DBG: added comment+label set/get/del
DBG: added MSVC lib files for sqlite
PROJECT: updated help
PROJECT: update gitignore
This commit is contained in:
mr.exodia 2013-11-16 15:01:29 +01:00
parent 5a862a2d1e
commit eb60123786
26 changed files with 958 additions and 136 deletions

2
.gitignore vendored
View File

@ -2,6 +2,8 @@
*/obj/
bin/*/*
ipch/*
x64_dbg_*/Win32/*
x64_dbg_*/x64/*
#global filetypes to ignore
*.depend

View File

@ -0,0 +1,34 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>cmt/cmtset/commentset</title>
<meta name="GENERATOR" content="WinCHM">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
html,body {
/* Default Font */
font-family: Courier New;
font-size: 11pt;
}
</style>
</head>
<body>
<P><STRONG>cmt[,cmtset,commentset]<BR></STRONG>Set a
comment.</P>
<P>
<U>
arguments</U>
<BR>&nbsp; arg1:&nbsp;Address to set the comment at (preferably inside a
module).</P>
<P >
&nbsp;
arg2: Comment text.</P>
<P >
<U>
result</U>
<BR>
This command does not set
any result variables.</P></body>

View File

@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>cmtc/cmtdel/commentdel</title>
<meta name="GENERATOR" content="WinCHM">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
html,body {
/* Default Font */
font-family: Courier New;
font-size: 11pt;
}
</style>
</head>
<body>
<P><STRONG>cmtc[,cmtdel,commentdel]<BR></STRONG>Delete a comment.</P>
<P>
<U>
arguments
</U>
<BR>&nbsp; arg1:&nbsp;Address of the comment to delete.</P>
<P>
<U >
result</U>
<BR>
This command does not set any result variables.</P></body>

View File

@ -0,0 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>lbl/lblset/labelset</title>
<meta name="GENERATOR" content="WinCHM">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
html,body {
/* Default Font */
font-family: Courier New;
font-size: 11pt;
}
</style>
</head>
<body>
<P><STRONG>lbl[,lblset,labelset]<BR></STRONG>Set a label.</P>
<P>
<U>
arguments
</U>
<BR>&nbsp; arg1:&nbsp;Address to set the label at (preferably
inside a module).
</P>
<P > &nbsp; arg2: Label text.</P>
<P >
<U>
result</U>
<BR>This command does not set any result
variables.</P></body>

View File

@ -0,0 +1,22 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>lblc/lbldel/labeldel</title>
<meta name="GENERATOR" content="WinCHM">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
html,body {
/* Default Font */
font-family: Courier New;
font-size: 11pt;
}
</style>
</head>
<body>
<P><STRONG>lblc[,lbldel,labeldel]<BR></STRONG>Delete a label.</P>
<P><U>arguments </U><BR>&nbsp; arg1:&nbsp;Address of the label to delete.</P>
<P><U>result</U> <BR>This command does not set any result
variables.</P></body>
</html>

View File

@ -96,7 +96,7 @@ Font=
DefaultTopic=Introduction.htm
[TOPICS]
TitleList=36
TitleList=39
TitleList.Title.0=Introduction
TitleList.Level.0=0
TitleList.Url.0=Introduction.htm
@ -137,324 +137,354 @@ TitleList.ContextNumber.3=1020
TitleList.ApplyTemp.3=0
TitleList.Expanded.3=0
TitleList.Kind.3=0
TitleList.Title.4=Hotkeys
TitleList.Level.4=1
TitleList.Url.4=Hotkeys.htm
TitleList.Title.4=Commands
TitleList.Level.4=0
TitleList.Url.4=Commands.htm
TitleList.Icon.4=0
TitleList.Status.4=0
TitleList.Keywords.4=
TitleList.ContextNumber.4=1034
TitleList.ContextNumber.4=1003
TitleList.ApplyTemp.4=0
TitleList.Expanded.4=0
TitleList.Expanded.4=1
TitleList.Kind.4=0
TitleList.Title.5=Commands
TitleList.Level.5=0
TitleList.Url.5=Commands.htm
TitleList.Title.5=x/exit
TitleList.Level.5=1
TitleList.Url.5=x_exit.htm
TitleList.Icon.5=0
TitleList.Status.5=0
TitleList.Keywords.5=
TitleList.ContextNumber.5=1003
TitleList.ContextNumber.5=1004
TitleList.ApplyTemp.5=0
TitleList.Expanded.5=0
TitleList.Kind.5=0
TitleList.Title.6=x/exit
TitleList.Title.6=strlen/charcount/ccount
TitleList.Level.6=1
TitleList.Url.6=x_exit.htm
TitleList.Url.6=strlen_charcount_ccount.htm
TitleList.Icon.6=0
TitleList.Status.6=0
TitleList.Keywords.6=
TitleList.ContextNumber.6=1004
TitleList.ContextNumber.6=1005
TitleList.ApplyTemp.6=0
TitleList.Expanded.6=0
TitleList.Kind.6=0
TitleList.Title.7=strlen/charcount/ccount
TitleList.Title.7=var/varnew
TitleList.Level.7=1
TitleList.Url.7=strlen_charcount_ccount.htm
TitleList.Url.7=var_varnew.htm
TitleList.Icon.7=0
TitleList.Status.7=0
TitleList.Keywords.7=
TitleList.ContextNumber.7=1005
TitleList.ContextNumber.7=1006
TitleList.ApplyTemp.7=0
TitleList.Expanded.7=0
TitleList.Kind.7=0
TitleList.Title.8=var/varnew
TitleList.Title.8=vardel
TitleList.Level.8=1
TitleList.Url.8=var_varnew.htm
TitleList.Url.8=vardel.htm
TitleList.Icon.8=0
TitleList.Status.8=0
TitleList.Keywords.8=
TitleList.ContextNumber.8=1006
TitleList.ContextNumber.8=1007
TitleList.ApplyTemp.8=0
TitleList.Expanded.8=0
TitleList.Kind.8=0
TitleList.Title.9=vardel
TitleList.Title.9=mov/set
TitleList.Level.9=1
TitleList.Url.9=vardel.htm
TitleList.Url.9=mov_set.htm
TitleList.Icon.9=0
TitleList.Status.9=0
TitleList.Keywords.9=
TitleList.ContextNumber.9=1007
TitleList.ContextNumber.9=1008
TitleList.ApplyTemp.9=0
TitleList.Expanded.9=0
TitleList.Kind.9=0
TitleList.Title.10=mov/set
TitleList.Title.10=cls
TitleList.Level.10=1
TitleList.Url.10=mov_set.htm
TitleList.Url.10=cls.htm
TitleList.Icon.10=0
TitleList.Status.10=0
TitleList.Keywords.10=
TitleList.ContextNumber.10=1008
TitleList.ContextNumber.10=1009
TitleList.ApplyTemp.10=0
TitleList.Expanded.10=0
TitleList.Kind.10=0
TitleList.Title.11=cls
TitleList.Title.11=varlist
TitleList.Level.11=1
TitleList.Url.11=cls.htm
TitleList.Url.11=varlist.htm
TitleList.Icon.11=0
TitleList.Status.11=0
TitleList.Keywords.11=
TitleList.ContextNumber.11=1009
TitleList.ContextNumber.11=1010
TitleList.ApplyTemp.11=0
TitleList.Expanded.11=0
TitleList.Kind.11=0
TitleList.Title.12=varlist
TitleList.Title.12=InitDebug/initdbg/init
TitleList.Level.12=1
TitleList.Url.12=varlist.htm
TitleList.Url.12=InitDebug_initdbg_init.htm
TitleList.Icon.12=0
TitleList.Status.12=0
TitleList.Keywords.12=
TitleList.ContextNumber.12=1010
TitleList.ContextNumber.12=1011
TitleList.ApplyTemp.12=0
TitleList.Expanded.12=0
TitleList.Kind.12=0
TitleList.Title.13=InitDebug/initdbg/init
TitleList.Title.13=run/go/r/g
TitleList.Level.13=1
TitleList.Url.13=InitDebug_initdbg_init.htm
TitleList.Url.13=run_go_r_g.htm
TitleList.Icon.13=0
TitleList.Status.13=0
TitleList.Keywords.13=
TitleList.ContextNumber.13=1011
TitleList.ContextNumber.13=1013
TitleList.ApplyTemp.13=0
TitleList.Expanded.13=0
TitleList.Kind.13=0
TitleList.Title.14=run/go/r/g
TitleList.Title.14=SetBPXOptions/bptype
TitleList.Level.14=1
TitleList.Url.14=run_go_r_g.htm
TitleList.Url.14=SetBPXOptions_bptype.htm
TitleList.Icon.14=0
TitleList.Status.14=0
TitleList.Keywords.14=
TitleList.ContextNumber.14=1013
TitleList.ContextNumber.14=1018
TitleList.ApplyTemp.14=0
TitleList.Expanded.14=0
TitleList.Kind.14=0
TitleList.Title.15=SetBPXOptions/bptype
TitleList.Title.15=SetBPX/bp/bpx
TitleList.Level.15=1
TitleList.Url.15=SetBPXOptions_bptype.htm
TitleList.Url.15=SetBPX_bp_bpx.htm
TitleList.Icon.15=0
TitleList.Status.15=0
TitleList.Keywords.15=
TitleList.ContextNumber.15=1018
TitleList.ContextNumber.15=1012
TitleList.ApplyTemp.15=0
TitleList.Expanded.15=0
TitleList.Kind.15=0
TitleList.Title.16=SetBPX/bp/bpx
TitleList.Title.16=EnableBPX/bpe/be
TitleList.Level.16=1
TitleList.Url.16=SetBPX_bp_bpx.htm
TitleList.Url.16=EnableBPX_bpe_be.htm
TitleList.Icon.16=0
TitleList.Status.16=0
TitleList.Keywords.16=
TitleList.ContextNumber.16=1012
TitleList.ContextNumber.16=1014
TitleList.ApplyTemp.16=0
TitleList.Expanded.16=0
TitleList.Kind.16=0
TitleList.Title.17=EnableBPX/bpe/be
TitleList.Title.17=DisableBPX/bpd/bd
TitleList.Level.17=1
TitleList.Url.17=EnableBPX_bpe_be.htm
TitleList.Url.17=DisableBPX_bpd_bd.htm
TitleList.Icon.17=0
TitleList.Status.17=0
TitleList.Keywords.17=
TitleList.ContextNumber.17=1014
TitleList.ContextNumber.17=1016
TitleList.ApplyTemp.17=0
TitleList.Expanded.17=0
TitleList.Kind.17=0
TitleList.Title.18=DisableBPX/bpd/bd
TitleList.Title.18=ToggleBPX/bpt/bt
TitleList.Level.18=1
TitleList.Url.18=DisableBPX_bpd_bd.htm
TitleList.Url.18=ToggleBPX_bpt_bt.htm
TitleList.Icon.18=0
TitleList.Status.18=0
TitleList.Keywords.18=
TitleList.ContextNumber.18=1016
TitleList.ContextNumber.18=1019
TitleList.ApplyTemp.18=0
TitleList.Expanded.18=0
TitleList.Kind.18=0
TitleList.Title.19=ToggleBPX/bpt/bt
TitleList.Title.19=DeleteBPX/bpc/bc
TitleList.Level.19=1
TitleList.Url.19=ToggleBPX_bpt_bt.htm
TitleList.Url.19=DeleteBPX_bpc_bc.htm
TitleList.Icon.19=0
TitleList.Status.19=0
TitleList.Keywords.19=
TitleList.ContextNumber.19=1019
TitleList.ContextNumber.19=1017
TitleList.ApplyTemp.19=0
TitleList.Expanded.19=0
TitleList.Kind.19=0
TitleList.Title.20=DeleteBPX/bpc/bc
TitleList.Title.20=bplist
TitleList.Level.20=1
TitleList.Url.20=DeleteBPX_bpc_bc.htm
TitleList.Url.20=bplist.htm
TitleList.Icon.20=0
TitleList.Status.20=0
TitleList.Keywords.20=
TitleList.ContextNumber.20=1017
TitleList.ContextNumber.20=1015
TitleList.ApplyTemp.20=0
TitleList.Expanded.20=0
TitleList.Kind.20=0
TitleList.Title.21=bplist
TitleList.Title.21=StepInto/sti
TitleList.Level.21=1
TitleList.Url.21=bplist.htm
TitleList.Url.21=StepInto.htm
TitleList.Icon.21=0
TitleList.Status.21=0
TitleList.Keywords.21=
TitleList.ContextNumber.21=1015
TitleList.ContextNumber.21=1021
TitleList.ApplyTemp.21=0
TitleList.Expanded.21=0
TitleList.Kind.21=0
TitleList.Title.22=StepInto/sti
TitleList.Title.22=StepOver/step/sto/st
TitleList.Level.22=1
TitleList.Url.22=StepInto.htm
TitleList.Url.22=StepOver.htm
TitleList.Icon.22=0
TitleList.Status.22=0
TitleList.Keywords.22=
TitleList.ContextNumber.22=1021
TitleList.ContextNumber.22=1022
TitleList.ApplyTemp.22=0
TitleList.Expanded.22=0
TitleList.Kind.22=0
TitleList.Title.23=StepOver/step/sto/st
TitleList.Title.23=SingleStep/sstep/sst
TitleList.Level.23=1
TitleList.Url.23=StepOver.htm
TitleList.Url.23=SingleStep.htm
TitleList.Icon.23=0
TitleList.Status.23=0
TitleList.Keywords.23=
TitleList.ContextNumber.23=1022
TitleList.ContextNumber.23=1023
TitleList.ApplyTemp.23=0
TitleList.Expanded.23=0
TitleList.Kind.23=0
TitleList.Title.24=SingleStep/sstep/sst
TitleList.Title.24=HideDebugger/dbh/hide
TitleList.Level.24=1
TitleList.Url.24=SingleStep.htm
TitleList.Url.24=HideDebugger_dbh_hide.htm
TitleList.Icon.24=0
TitleList.Status.24=0
TitleList.Keywords.24=
TitleList.ContextNumber.24=1023
TitleList.ContextNumber.24=1025
TitleList.ApplyTemp.24=0
TitleList.Expanded.24=0
TitleList.Kind.24=0
TitleList.Title.25=HideDebugger/dbh/hide
TitleList.Title.25=disasm/dis/d
TitleList.Level.25=1
TitleList.Url.25=HideDebugger_dbh_hide.htm
TitleList.Url.25=disasm_dis_d.htm
TitleList.Icon.25=0
TitleList.Status.25=0
TitleList.Keywords.25=
TitleList.ContextNumber.25=1025
TitleList.ContextNumber.25=1026
TitleList.ApplyTemp.25=0
TitleList.Expanded.25=0
TitleList.Kind.25=0
TitleList.Title.26=disasm/dis/d
TitleList.Title.26=SetMemoryBPX/membp/bpm
TitleList.Level.26=1
TitleList.Url.26=disasm_dis_d.htm
TitleList.Url.26=SetMemoryBPX_membp_bpm.htm
TitleList.Icon.26=0
TitleList.Status.26=0
TitleList.Keywords.26=
TitleList.ContextNumber.26=1026
TitleList.ContextNumber.26=1027
TitleList.ApplyTemp.26=0
TitleList.Expanded.26=0
TitleList.Kind.26=0
TitleList.Title.27=SetMemoryBPX/membp/bpm
TitleList.Title.27=chd
TitleList.Level.27=1
TitleList.Url.27=SetMemoryBPX_membp_bpm.htm
TitleList.Url.27=chd.htm
TitleList.Icon.27=0
TitleList.Status.27=0
TitleList.Keywords.27=
TitleList.ContextNumber.27=1027
TitleList.ContextNumber.27=1029
TitleList.ApplyTemp.27=0
TitleList.Expanded.27=0
TitleList.Kind.27=0
TitleList.Title.28=chd
TitleList.Title.28=rtr
TitleList.Level.28=1
TitleList.Url.28=chd.htm
TitleList.Url.28=rtr.htm
TitleList.Icon.28=0
TitleList.Status.28=0
TitleList.Keywords.28=
TitleList.ContextNumber.28=1029
TitleList.ContextNumber.28=1028
TitleList.ApplyTemp.28=0
TitleList.Expanded.28=0
TitleList.Kind.28=0
TitleList.Title.29=rtr
TitleList.Title.29=SetHardwareBreakpoint/bph/bphws
TitleList.Level.29=1
TitleList.Url.29=rtr.htm
TitleList.Url.29=SetHardwareBreakpoint_bph_bphws.htm
TitleList.Icon.29=0
TitleList.Status.29=0
TitleList.Keywords.29=
TitleList.ContextNumber.29=1028
TitleList.ContextNumber.29=1030
TitleList.ApplyTemp.29=0
TitleList.Expanded.29=0
TitleList.Kind.29=0
TitleList.Title.30=SetHardwareBreakpoint/bph/bphws
TitleList.Title.30=alloc
TitleList.Level.30=1
TitleList.Url.30=SetHardwareBreakpoint_bph_bphws.htm
TitleList.Url.30=alloc.htm
TitleList.Icon.30=0
TitleList.Status.30=0
TitleList.Keywords.30=
TitleList.ContextNumber.30=1030
TitleList.ContextNumber.30=1032
TitleList.ApplyTemp.30=0
TitleList.Expanded.30=0
TitleList.Kind.30=0
TitleList.Title.31=alloc
TitleList.Title.31=free
TitleList.Level.31=1
TitleList.Url.31=alloc.htm
TitleList.Url.31=free.htm
TitleList.Icon.31=0
TitleList.Status.31=0
TitleList.Keywords.31=
TitleList.ContextNumber.31=1032
TitleList.ContextNumber.31=1031
TitleList.ApplyTemp.31=0
TitleList.Expanded.31=0
TitleList.Kind.31=0
TitleList.Title.32=free
TitleList.Title.32=Fill/memset
TitleList.Level.32=1
TitleList.Url.32=free.htm
TitleList.Url.32=Fill_memset.htm
TitleList.Icon.32=0
TitleList.Status.32=0
TitleList.Keywords.32=
TitleList.ContextNumber.32=1031
TitleList.ContextNumber.32=1033
TitleList.ApplyTemp.32=0
TitleList.Expanded.32=0
TitleList.Kind.32=0
TitleList.Title.33=Fill/memset
TitleList.Title.33=cmt/cmtset/commentset
TitleList.Level.33=1
TitleList.Url.33=Fill_memset.htm
TitleList.Url.33=cmt_cmtset_commentset.htm
TitleList.Icon.33=0
TitleList.Status.33=0
TitleList.Keywords.33=
TitleList.ContextNumber.33=1033
TitleList.ContextNumber.33=1035
TitleList.ApplyTemp.33=0
TitleList.Expanded.33=0
TitleList.Kind.33=0
TitleList.Title.34=Special Thanks
TitleList.Level.34=0
TitleList.Url.34=Special_Thanks.htm
TitleList.Title.34=cmtc/cmtdel/commentdel
TitleList.Level.34=1
TitleList.Url.34=cmtc_cmtdel_commentdel.htm
TitleList.Icon.34=0
TitleList.Status.34=0
TitleList.Keywords.34=
TitleList.ContextNumber.34=1024
TitleList.ContextNumber.34=1036
TitleList.ApplyTemp.34=0
TitleList.Expanded.34=0
TitleList.Kind.34=0
TitleList.Title.35=Fixed Top Style
TitleList.Level.35=0
TitleList.Url.35=template\fixedtop.htm
TitleList.Title.35=lbl/lblset/labelset
TitleList.Level.35=1
TitleList.Url.35=lbl_lblset_labelset.htm
TitleList.Icon.35=0
TitleList.Status.35=0
TitleList.Keywords.35=
TitleList.ContextNumber.35=
TitleList.ContextNumber.35=1037
TitleList.ApplyTemp.35=0
TitleList.Expanded.35=0
TitleList.Kind.35=2
TitleList.Kind.35=0
TitleList.Title.36=lblc/lbldel/labeldel
TitleList.Level.36=1
TitleList.Url.36=lblc_lbldel_labeldel.htm
TitleList.Icon.36=0
TitleList.Status.36=0
TitleList.Keywords.36=
TitleList.ContextNumber.36=1038
TitleList.ApplyTemp.36=0
TitleList.Expanded.36=0
TitleList.Kind.36=0
TitleList.Title.37=Special Thanks
TitleList.Level.37=0
TitleList.Url.37=Special_Thanks.htm
TitleList.Icon.37=0
TitleList.Status.37=0
TitleList.Keywords.37=
TitleList.ContextNumber.37=1024
TitleList.ApplyTemp.37=0
TitleList.Expanded.37=0
TitleList.Kind.37=0
TitleList.Title.38=Fixed Top Style
TitleList.Level.38=0
TitleList.Url.38=template\fixedtop.htm
TitleList.Icon.38=0
TitleList.Status.38=0
TitleList.Keywords.38=
TitleList.ContextNumber.38=
TitleList.ApplyTemp.38=0
TitleList.Expanded.38=0
TitleList.Kind.38=2

View File

@ -28,3 +28,4 @@ DBGADDRINFOSET _dbg_addrinfoset;
DBGBPGETTYPEAT _dbg_bpgettypeat;
DBGGETREGDUMP _dbg_getregdump;
DBGVALTOSTRING _dbg_valtostring;
DBGMEMISVALIDREADPTR _dbg_memisvalidreadptr;

View File

@ -60,6 +60,7 @@ typedef bool (*DBGADDRINFOSET)(duint addr, ADDRINFO* addrinfo);
typedef BPXTYPE (*DBGBPGETTYPEAT)(duint addr);
typedef bool (*DBGGETREGDUMP)(REGDUMP* regdump);
typedef bool (*DBGVALTOSTRING)(const char* string, duint* value);
typedef bool (*DBGMEMISVALIDREADPTR)(duint addr);
//DBG functions
extern DBGDBGINIT _dbg_dbginit;
@ -76,5 +77,6 @@ extern DBGADDRINFOSET _dbg_addrinfoset;
extern DBGBPGETTYPEAT _dbg_bpgettypeat;
extern DBGGETREGDUMP _dbg_getregdump;
extern DBGVALTOSTRING _dbg_valtostring;
extern DBGMEMISVALIDREADPTR _dbg_memisvalidreadptr;
#endif // _GLOBAL_H

View File

@ -108,6 +108,10 @@ DLL_IMPEXP const char* BridgeInit()
_dbg_valtostring=(DBGVALTOSTRING)GetProcAddress(hInstDbg, "_dbg_valtostring");
if(!_dbg_valtostring)
return "Export \"_dbg_valtostring\" could not be found!";
//_dbg_memisvalidreadptr
_dbg_memisvalidreadptr=(DBGMEMISVALIDREADPTR)GetProcAddress(hInstDbg, "_dbg_memisvalidreadptr");
if(!_dbg_memisvalidreadptr)
return "Export \"_dbg_memisvalidreadptr\" could not be found!";
return 0;
}
@ -187,24 +191,8 @@ DLL_IMPEXP bool DbgIsJumpGoingToExecute(duint addr)
DLL_IMPEXP bool DbgGetLabelAt(duint addr, SEGMENTREG segment, char* text) //(module.)+label
{
if(!text or !addr)
if(!text || !addr)
return false;
//test code (highlighting.exe|x32)
/*if(addr==0x40102b)
{
strcpy(text, "highlighting.retn");
return true;
}
else if(addr==0x401020 || addr==0x401022)
{
strcpy(text, "highlighting.label");
return true;
}
else if(addr==0x402000)
{
strcpy(text, "highlighting.dataLabel");
return true;
}*/
ADDRINFO info;
memset(&info, 0, sizeof(info));
info.flags=label;
@ -216,7 +204,7 @@ DLL_IMPEXP bool DbgGetLabelAt(duint addr, SEGMENTREG segment, char* text) //(mod
DLL_IMPEXP bool DbgSetLabelAt(duint addr, const char* text)
{
if(!text or strlen(text)>=MAX_LABEL_SIZE or !addr)
if(!text || strlen(text)>=MAX_LABEL_SIZE || !addr)
return false;
ADDRINFO info;
memset(&info, 0, sizeof(info));
@ -229,14 +217,8 @@ DLL_IMPEXP bool DbgSetLabelAt(duint addr, const char* text)
DLL_IMPEXP bool DbgGetCommentAt(duint addr, char* text) //comment (not live)
{
if(!text or !addr)
if(!text || !addr)
return false;
//test code (highlighting.exe)
/*if(addr==0x401000)
{
strcpy(text, "test comment");
return true;
}*/
ADDRINFO info;
memset(&info, 0, sizeof(info));
info.flags=comment;
@ -248,7 +230,7 @@ DLL_IMPEXP bool DbgGetCommentAt(duint addr, char* text) //comment (not live)
DLL_IMPEXP bool DbgSetCommentAt(duint addr, const char* text)
{
if(!text or strlen(text)>=MAX_COMMENT_SIZE or !addr)
if(!text || strlen(text)>=MAX_COMMENT_SIZE || !addr)
return false;
ADDRINFO info;
memset(&info, 0, sizeof(info));
@ -261,7 +243,7 @@ DLL_IMPEXP bool DbgSetCommentAt(duint addr, const char* text)
DLL_IMPEXP bool DbgGetModuleAt(duint addr, char* text)
{
if(!text or !addr)
if(!text || !addr)
return false;
ADDRINFO info;
memset(&info, 0, sizeof(info));
@ -295,6 +277,11 @@ DLL_IMPEXP bool DbgValToString(const char* string, duint value)
return _dbg_valtostring(string, &valueCopy);
}
DLL_IMPEXP bool DbgMemIsValidReadPtr(duint addr)
{
return _dbg_memisvalidreadptr(addr);
}
//GUI
DLL_IMPEXP void GuiDisasmAt(duint addr, duint cip)
{

View File

@ -158,6 +158,7 @@ DLL_IMPEXP BPXTYPE DbgGetBpxTypeAt(duint addr);
DLL_IMPEXP duint DbgValFromString(const char* string);
DLL_IMPEXP bool DbgGetRegDump(REGDUMP* regdump);
DLL_IMPEXP bool DbgValToString(const char* string, duint value);
DLL_IMPEXP bool DbgMemIsValidReadPtr(duint addr);
//GUI functions
DLL_IMPEXP void GuiDisasmAt(duint addr, duint cip);

View File

@ -60,6 +60,11 @@ extern "C" DLL_EXPORT bool _dbg_memmap(MEMMAP* memmap)
return true;
}
extern "C" DLL_EXPORT bool _dbg_memisvalidreadptr(duint addr)
{
return memisvalidreadptr(fdProcessInfo->hProcess, addr);
}
extern "C" DLL_EXPORT void _dbg_dbgexitsignal()
{
//TODO: handle exit signal
@ -106,18 +111,39 @@ extern "C" DLL_EXPORT bool _dbg_addrinfoget(duint addr, SEGMENTREG segment, ADDR
}
if(addrinfo->flags&label) //TODO: get label
{
//TODO: label exports
if(labelget(addr, addrinfo->label))
retval=true;
else
{
//TODO: label exports
}
}
if(addrinfo->flags&comment) //TODO: get comment
{
//TODO: auto-comments
if(commentget(addr, addrinfo->comment))
retval=true;
else
{
//TODO: auto-comments
}
}
return retval;
}
extern "C" DLL_EXPORT bool _dbg_addrinfoset(duint addr, ADDRINFO* addrinfo)
{
return false;
bool retval=false;
if(addrinfo->flags&label) //set label
{
if(labelset(addr, addrinfo->label))
retval=true;
}
else if(addrinfo->flags&comment) //set comment
{
if(commentset(addr, addrinfo->comment))
retval=true;
}
return retval;
}
extern "C" DLL_EXPORT int _dbg_bpgettypeat(duint addr)

View File

@ -11,6 +11,7 @@ extern "C"
DLL_EXPORT duint _dbg_memfindbaseaddr(duint addr, duint* size);
DLL_EXPORT bool _dbg_memread(duint addr, unsigned char* dest, duint size, duint* read);
DLL_EXPORT bool _dbg_memmap(MEMMAP* memmap);
extern "C" DLL_EXPORT bool _dbg_memisvalidreadptr(duint addr);
DLL_EXPORT void _dbg_dbgexitsignal();
DLL_EXPORT bool _dbg_valfromstring(const char* string, duint* value);
DLL_EXPORT bool _dbg_isdebugging();

View File

@ -1,6 +1,8 @@
#include "_global.h"
HINSTANCE hInst;
char sqlitedb_basedir[deflen]="";
char dbpath[deflen]="";
void* emalloc(size_t size)
{

View File

@ -16,6 +16,7 @@
#include <psapi.h>
#include <vector>
#include "..\x64_dbg_bridge\bridgemain.h"
#include "sqlite\sqlite3.h"
#ifdef __GNUC__
#include "dbghelp\dbghelp.h"
@ -90,6 +91,8 @@ enum BITMASK
//superglobal variables
extern HINSTANCE hInst;
extern char sqlitedb_basedir[deflen];
extern char dbpath[deflen];
//functions
void* emalloc(size_t size);

View File

@ -1,5 +1,33 @@
#include "addrinfo.h"
#include "debugger.h"
#include "console.h"
#include "memory.h"
void dbinit()
{
CreateDirectoryA(sqlitedb_basedir, 0); //create database directory
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return;
}
char sql[deflen]="";
char* errorText=0;
strcpy(sql, "CREATE TABLE IF NOT EXISTS comments (id INTEGER PRIMARY KEY AUTOINCREMENT, mod TEXT, addr INT64 NOT NULL, text TEXT NOT NULL)");
if(sqlite3_exec(db, sql, 0, 0, &errorText)!=SQLITE_OK) //error
{
dprintf("SQL Error: %s\n", errorText);
sqlite3_free(errorText);
}
strcpy(sql, "CREATE TABLE IF NOT EXISTS labels (id INTEGER PRIMARY KEY AUTOINCREMENT, mod TEXT, addr INT64 NOT NULL, text TEXT NOT NULL)");
if(sqlite3_exec(db, sql, 0, 0, &errorText)!=SQLITE_OK) //error
{
dprintf("SQL Error: %s\n", errorText);
sqlite3_free(errorText);
}
sqlite3_close(db);
}
bool modnamefromaddr(uint addr, char* modname)
{
@ -12,3 +40,303 @@ bool modnamefromaddr(uint addr, char* modname)
strcpy(modname, modInfo.ModuleName);
return true;
}
uint modbasefromaddr(uint addr)
{
IMAGEHLP_MODULE64 modInfo;
memset(&modInfo, 0, sizeof(modInfo));
modInfo.SizeOfStruct=sizeof(IMAGEHLP_MODULE64);
if(!SymGetModuleInfo64(fdProcessInfo->hProcess, (DWORD64)addr, &modInfo))
return 0;
return (uint)modInfo.BaseOfImage;
}
bool commentset(uint addr, const char* text)
{
if(!IsFileBeingDebugged() or !memisvalidreadptr(fdProcessInfo->hProcess, addr) or !text or strlen(text)>=MAX_COMMENT_SIZE-1)
return false;
if(!*text) //NOTE: delete when there is no text
return commentdel(addr);
int len=strlen(text);
char* newtext=(char*)emalloc(len+1);
*newtext=0;
for(int i=0,j=0; i<len; i++)
{
if(text[i]=='\"' or text[i]=='\'')
j+=sprintf(newtext+j, "''");
else
j+=sprintf(newtext+j, "%c", text[i]);
}
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return false;
}
char modname[35]="";
char sql[256]="";
sqlite3_stmt* stmt;
if(!modnamefromaddr(addr, modname)) //comments without module
{
sprintf(sql, "SELECT text FROM comments WHERE mod IS NULL AND addr=%"fext"u", addr);
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)==SQLITE_ROW) //there is a comment already
sprintf(sql, "UPDATE comments SET text='%s' WHERE mod IS NULL AND addr=%"fext"u", newtext, addr);
else //insert
sprintf(sql, "INSERT INTO comments (addr,text) VALUES (%"fext"u,'%s')", addr, newtext);
}
else
{
uint modbase=modbasefromaddr(addr);
uint rva=addr-modbase;
sprintf(sql, "SELECT text FROM comments WHERE mod='%s' AND addr=%"fext"u", modname, rva);
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)==SQLITE_ROW) //there is a comment already
sprintf(sql, "UPDATE comments SET text='%s' WHERE mod='%s' AND addr=%"fext"u", newtext, modname, rva);
else //insert
sprintf(sql, "INSERT INTO comments (mod,addr,text) VALUES ('%s',%"fext"u,'%s')", modname, rva, newtext);
}
sqlite3_finalize(stmt);
efree(newtext);
char* errorText=0;
if(sqlite3_exec(db, sql, 0, 0, &errorText)!=SQLITE_OK) //error
{
dprintf("SQL Error: %s\n", errorText);
sqlite3_free(errorText);
sqlite3_close(db);
return false;
}
sqlite3_close(db);
GuiUpdateAllViews();
return true;
}
bool commentget(uint addr, char* text)
{
if(!IsFileBeingDebugged() or !memisvalidreadptr(fdProcessInfo->hProcess, addr) or !text)
return false;
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return false;
}
char modname[35]="";
char sql[256]="";
sqlite3_stmt* stmt;
if(!modnamefromaddr(addr, modname)) //comments without module
sprintf(sql, "SELECT text FROM comments WHERE mod IS NULL AND addr=%"fext"u", addr);
else
sprintf(sql, "SELECT text FROM comments WHERE mod='%s' AND addr=%"fext"u", modname, addr-modbasefromaddr(addr));
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)!=SQLITE_ROW) //there is a comment already
{
sqlite3_close(db);
return false;
}
strcpy(text, (const char*)sqlite3_column_text(stmt, 0));
sqlite3_finalize(stmt);
sqlite3_close(db);
return true;
}
bool commentdel(uint addr)
{
if(!IsFileBeingDebugged() or !memisvalidreadptr(fdProcessInfo->hProcess, addr))
return false;
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return false;
}
char modname[35]="";
char sql[256]="";
sqlite3_stmt* stmt;
if(!modnamefromaddr(addr, modname)) //comments without module
sprintf(sql, "SELECT id FROM comments WHERE mod IS NULL AND addr=%"fext"u", addr);
else
{
uint modbase=modbasefromaddr(addr);
uint rva=addr-modbase;
sprintf(sql, "SELECT id FROM comments WHERE mod='%s' AND addr=%"fext"u", modname, rva);
}
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)!=SQLITE_ROW) //no comment to delete
return false;
int del_id=sqlite3_column_int(stmt, 0);
sqlite3_finalize(stmt);
char* errorText=0;
sprintf(sql, "DELETE FROM comments WHERE id=%d", del_id);
if(sqlite3_exec(db, sql, 0, 0, &errorText)!=SQLITE_OK) //error
{
dprintf("SQL Error: %s\n", errorText);
sqlite3_free(errorText);
sqlite3_close(db);
return false;
}
sqlite3_close(db);
GuiUpdateAllViews();
return true;
}
bool labelset(uint addr, const char* text)
{
if(!IsFileBeingDebugged() or !memisvalidreadptr(fdProcessInfo->hProcess, addr) or !text or strlen(text)>=MAX_LABEL_SIZE-1)
return false;
if(!*text) //NOTE: delete when there is no text
return labeldel(addr);
int len=strlen(text);
char* newtext=(char*)emalloc(len+1);
*newtext=0;
for(int i=0,j=0; i<len; i++)
{
if(text[i]=='\"' or text[i]=='\'')
j+=sprintf(newtext+j, "''");
else
j+=sprintf(newtext+j, "%c", text[i]);
}
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return false;
}
char modname[35]="";
char sql[256]="";
sqlite3_stmt* stmt;
if(!modnamefromaddr(addr, modname)) //labels without module
{
sprintf(sql, "SELECT text FROM labels WHERE mod IS NULL AND addr=%"fext"u", addr);
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)==SQLITE_ROW) //there is a label already
sprintf(sql, "UPDATE labels SET text='%s' WHERE mod IS NULL AND addr=%"fext"u", newtext, addr);
else //insert
sprintf(sql, "INSERT INTO labels (addr,text) VALUES (%"fext"u,'%s')", addr, newtext);
}
else
{
uint modbase=modbasefromaddr(addr);
uint rva=addr-modbase;
sprintf(sql, "SELECT text FROM labels WHERE mod='%s' AND addr=%"fext"u", modname, rva);
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)==SQLITE_ROW) //there is a label already
sprintf(sql, "UPDATE labels SET text='%s' WHERE mod='%s' AND addr=%"fext"u", newtext, modname, rva);
else //insert
sprintf(sql, "INSERT INTO labels (mod,addr,text) VALUES ('%s',%"fext"u,'%s')", modname, rva, newtext);
}
sqlite3_finalize(stmt);
efree(newtext);
char* errorText=0;
if(sqlite3_exec(db, sql, 0, 0, &errorText)!=SQLITE_OK) //error
{
dprintf("SQL Error: %s\n", errorText);
sqlite3_free(errorText);
sqlite3_close(db);
return false;
}
sqlite3_close(db);
GuiUpdateAllViews();
return true;
}
bool labelget(uint addr, char* text)
{
if(!IsFileBeingDebugged() or !memisvalidreadptr(fdProcessInfo->hProcess, addr) or !text)
return false;
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return false;
}
char modname[35]="";
char sql[256]="";
sqlite3_stmt* stmt;
if(!modnamefromaddr(addr, modname)) //labels without module
sprintf(sql, "SELECT text FROM labels WHERE mod IS NULL AND addr=%"fext"u", addr);
else
sprintf(sql, "SELECT text FROM labels WHERE mod='%s' AND addr=%"fext"u", modname, addr-modbasefromaddr(addr));
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)!=SQLITE_ROW) //there is a label already
{
sqlite3_close(db);
return false;
}
strcpy(text, (const char*)sqlite3_column_text(stmt, 0));
sqlite3_finalize(stmt);
sqlite3_close(db);
return true;
}
bool labeldel(uint addr)
{
if(!IsFileBeingDebugged() or !memisvalidreadptr(fdProcessInfo->hProcess, addr))
return false;
sqlite3* db;
if(sqlite3_open(dbpath, &db))
{
dputs("failed to open database!");
return false;
}
char modname[35]="";
char sql[256]="";
sqlite3_stmt* stmt;
if(!modnamefromaddr(addr, modname)) //labels without module
sprintf(sql, "SELECT id FROM labels WHERE mod IS NULL AND addr=%"fext"u", addr);
else
{
uint modbase=modbasefromaddr(addr);
uint rva=addr-modbase;
sprintf(sql, "SELECT id FROM labels WHERE mod='%s' AND addr=%"fext"u", modname, rva);
}
if(sqlite3_prepare_v2(db, sql, -1, &stmt, 0)!=SQLITE_OK)
{
sqlite3_close(db);
return false;
}
if(sqlite3_step(stmt)!=SQLITE_ROW) //no label to delete
return false;
int del_id=sqlite3_column_int(stmt, 0);
sqlite3_finalize(stmt);
char* errorText=0;
sprintf(sql, "DELETE FROM labels WHERE id=%d", del_id);
if(sqlite3_exec(db, sql, 0, 0, &errorText)!=SQLITE_OK) //error
{
dprintf("SQL Error: %s\n", errorText);
sqlite3_free(errorText);
sqlite3_close(db);
return false;
}
sqlite3_close(db);
GuiUpdateAllViews();
return true;
}

View File

@ -3,6 +3,13 @@
#include "_global.h"
void dbinit();
bool modnamefromaddr(uint addr, char* modname);
bool commentset(uint addr, const char* text);
bool commentget(uint addr, char* text);
bool commentdel(uint addr);
bool labelset(uint addr, const char* text);
bool labelget(uint addr, char* text);
bool labeldel(uint addr);
#endif // _ADDRINFO_H

View File

@ -19,6 +19,9 @@ static bool isStepping=false;
static bool isPausedByUser=false;
static bool bScyllaLoaded=false;
//Superglobal variables
char sqlitedb[deflen]="";
//static functions
static void cbStep();
static void cbSystemBreakpoint(void* ExceptionData);
@ -262,8 +265,24 @@ static void cbSystemBreakpoint(void* ExceptionData)
{
//TODO: handle stuff (TLS, main entry, etc)
SetCustomHandler(UE_CH_SYSTEMBREAKPOINT, 0);
//init program database
int len=strlen(szFileName);
while(szFileName[len]!='\\' && len!=0)
len--;
if(len)
len++;
strcpy(sqlitedb, szFileName+len);
#ifdef _WIN64
strcat(sqlitedb, ".dd64");
#else
strcat(sqlitedb, ".dd32");
#endif // _WIN64
sprintf(dbpath, "%s\\%s", sqlitedb_basedir, sqlitedb);
dprintf("Database file: %s\n", dbpath);
dbinit();
//log message
dputs("system breakpoint reached!");
//NOTE: call GUI
//update GUI
DebugUpdateGui(GetContextData(UE_CIP));
GuiSetDebugState(paused);
//unlock

View File

@ -4,6 +4,7 @@
#include "console.h"
#include "value.h"
#include "command.h"
#include "addrinfo.h"
CMDRESULT cbBadCmd(const char* cmd)
{
@ -209,3 +210,73 @@ CMDRESULT cbInstrChd(const char* cmd)
dputs("current directory changed!");
return STATUS_CONTINUE;
}
CMDRESULT cbInstrCmt(const char* cmd)
{
char arg1[deflen]="";
if(!argget(cmd, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr, 0, 0, true, 0))
return STATUS_ERROR;
char arg2[deflen]="";
if(!argget(cmd, arg2, 1, false))
return STATUS_ERROR;
if(!commentset(addr, arg2))
{
dputs("error setting comment");
return STATUS_ERROR;
}
return STATUS_CONTINUE;
}
CMDRESULT cbInstrCmtdel(const char* cmd)
{
char arg1[deflen]="";
if(!argget(cmd, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr, 0, 0, true, 0))
return STATUS_ERROR;
if(!commentdel(addr))
{
dputs("error deleting comment");
return STATUS_ERROR;
}
return STATUS_CONTINUE;
}
CMDRESULT cbInstrLbl(const char* cmd)
{
char arg1[deflen]="";
if(!argget(cmd, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr, 0, 0, true, 0))
return STATUS_ERROR;
char arg2[deflen]="";
if(!argget(cmd, arg2, 1, false))
return STATUS_ERROR;
if(!labelset(addr, arg2))
{
dputs("error setting label");
return STATUS_ERROR;
}
return STATUS_CONTINUE;
}
CMDRESULT cbInstrLbldel(const char* cmd)
{
char arg1[deflen]="";
if(!argget(cmd, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr, 0, 0, true, 0))
return STATUS_ERROR;
if(!labeldel(addr))
{
dputs("error deleting label");
return STATUS_ERROR;
}
return STATUS_CONTINUE;
}

View File

@ -11,5 +11,9 @@ CMDRESULT cbInstrVarDel(const char* cmd);
CMDRESULT cbInstrMov(const char* cmd);
CMDRESULT cbInstrVarList(const char* cmd);
CMDRESULT cbInstrChd(const char* cmd);
CMDRESULT cbInstrCmt(const char* cmd);
CMDRESULT cbInstrCmtdel(const char* cmd);
CMDRESULT cbInstrLbl(const char* cmd);
CMDRESULT cbInstrLbldel(const char* cmd);
#endif // _INSTRUCTIONS_H

View File

@ -63,6 +63,12 @@ bool memread(HANDLE hProcess, const void* lpBaseAddress, void* lpBuffer, SIZE_T
return true;
}
bool memisvalidreadptr(HANDLE hProcess, uint addr)
{
unsigned char a=0;
return memread(hProcess, (void*)addr, &a, 1, 0);
}
void* memalloc(HANDLE hProcess, uint addr, DWORD size, DWORD fdProtect)
{
return VirtualAllocEx(hProcess, (void*)addr, size, MEM_RESERVE|MEM_COMMIT, fdProtect);

View File

@ -7,6 +7,7 @@
uint memfindbaseaddr(HANDLE hProcess, uint addr, uint* size);
bool memread(HANDLE hProcess, const void* lpBaseAddress, void* lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead);
bool memisvalidreadptr(HANDLE hProcess, uint addr);
void* memalloc(HANDLE hProcess, uint addr, DWORD size, DWORD fdProtect);
#endif // _MEMORY_H

View File

@ -0,0 +1,207 @@
LIBRARY "sqlite.dll"
EXPORTS
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_auto_extension
sqlite3_backup_finish
sqlite3_backup_init
sqlite3_backup_pagecount
sqlite3_backup_remaining
sqlite3_backup_step
sqlite3_bind_blob
sqlite3_bind_double
sqlite3_bind_int
sqlite3_bind_int64
sqlite3_bind_null
sqlite3_bind_parameter_count
sqlite3_bind_parameter_index
sqlite3_bind_parameter_name
sqlite3_bind_text
sqlite3_bind_text16
sqlite3_bind_value
sqlite3_bind_zeroblob
sqlite3_blob_bytes
sqlite3_blob_close
sqlite3_blob_open
sqlite3_blob_read
sqlite3_blob_reopen
sqlite3_blob_write
sqlite3_busy_handler
sqlite3_busy_timeout
sqlite3_cancel_auto_extension
sqlite3_changes
sqlite3_clear_bindings
sqlite3_close
sqlite3_close_v2
sqlite3_collation_needed
sqlite3_collation_needed16
sqlite3_column_blob
sqlite3_column_bytes
sqlite3_column_bytes16
sqlite3_column_count
sqlite3_column_decltype
sqlite3_column_decltype16
sqlite3_column_double
sqlite3_column_int
sqlite3_column_int64
sqlite3_column_name
sqlite3_column_name16
sqlite3_column_text
sqlite3_column_text16
sqlite3_column_type
sqlite3_column_value
sqlite3_commit_hook
sqlite3_compileoption_get
sqlite3_compileoption_used
sqlite3_complete
sqlite3_complete16
sqlite3_config
sqlite3_context_db_handle
sqlite3_create_collation
sqlite3_create_collation16
sqlite3_create_collation_v2
sqlite3_create_function
sqlite3_create_function16
sqlite3_create_function_v2
sqlite3_create_module
sqlite3_create_module_v2
sqlite3_data_count
sqlite3_data_directory DATA
sqlite3_db_config
sqlite3_db_filename
sqlite3_db_handle
sqlite3_db_mutex
sqlite3_db_readonly
sqlite3_db_release_memory
sqlite3_db_status
sqlite3_declare_vtab
sqlite3_enable_load_extension
sqlite3_enable_shared_cache
sqlite3_errcode
sqlite3_errmsg
sqlite3_errmsg16
sqlite3_errstr
sqlite3_exec
sqlite3_expired
sqlite3_extended_errcode
sqlite3_extended_result_codes
sqlite3_file_control
sqlite3_finalize
sqlite3_free
sqlite3_free_table
sqlite3_get_autocommit
sqlite3_get_auxdata
sqlite3_get_table
sqlite3_global_recover
sqlite3_initialize
sqlite3_interrupt
sqlite3_last_insert_rowid
sqlite3_libversion
sqlite3_libversion_number
sqlite3_limit
sqlite3_load_extension
sqlite3_log
sqlite3_malloc
sqlite3_memory_alarm
sqlite3_memory_highwater
sqlite3_memory_used
sqlite3_mprintf
sqlite3_mutex_alloc
sqlite3_mutex_enter
sqlite3_mutex_free
sqlite3_mutex_leave
sqlite3_mutex_try
sqlite3_next_stmt
sqlite3_open
sqlite3_open16
sqlite3_open_v2
sqlite3_os_end
sqlite3_os_init
sqlite3_overload_function
sqlite3_prepare
sqlite3_prepare16
sqlite3_prepare16_v2
sqlite3_prepare_v2
sqlite3_profile
sqlite3_progress_handler
sqlite3_randomness
sqlite3_realloc
sqlite3_release_memory
sqlite3_reset
sqlite3_reset_auto_extension
sqlite3_result_blob
sqlite3_result_double
sqlite3_result_error
sqlite3_result_error16
sqlite3_result_error_code
sqlite3_result_error_nomem
sqlite3_result_error_toobig
sqlite3_result_int
sqlite3_result_int64
sqlite3_result_null
sqlite3_result_text
sqlite3_result_text16
sqlite3_result_text16be
sqlite3_result_text16le
sqlite3_result_value
sqlite3_result_zeroblob
sqlite3_rollback_hook
sqlite3_set_authorizer
sqlite3_set_auxdata
sqlite3_shutdown
sqlite3_sleep
sqlite3_snprintf
sqlite3_soft_heap_limit
sqlite3_soft_heap_limit64
sqlite3_sourceid
sqlite3_sql
sqlite3_status
sqlite3_step
sqlite3_stmt_busy
sqlite3_stmt_readonly
sqlite3_stmt_status
sqlite3_strglob
sqlite3_stricmp
sqlite3_strnicmp
sqlite3_temp_directory DATA
sqlite3_test_control
sqlite3_thread_cleanup
sqlite3_threadsafe
sqlite3_total_changes
sqlite3_trace
sqlite3_transfer_bindings
sqlite3_update_hook
sqlite3_uri_boolean
sqlite3_uri_int64
sqlite3_uri_parameter
sqlite3_user_data
sqlite3_value_blob
sqlite3_value_bytes
sqlite3_value_bytes16
sqlite3_value_double
sqlite3_value_int
sqlite3_value_int64
sqlite3_value_numeric_type
sqlite3_value_text
sqlite3_value_text16
sqlite3_value_text16be
sqlite3_value_text16le
sqlite3_value_type
sqlite3_version DATA
sqlite3_vfs_find
sqlite3_vfs_register
sqlite3_vfs_unregister
sqlite3_vmprintf
sqlite3_vsnprintf
sqlite3_vtab_config
sqlite3_vtab_on_conflict
sqlite3_wal_autocheckpoint
sqlite3_wal_checkpoint
sqlite3_wal_checkpoint_v2
sqlite3_wal_hook
sqlite3_win32_mbcs_to_utf8
sqlite3_win32_set_directory
sqlite3_win32_sleep
sqlite3_win32_utf8_to_mbcs
sqlite3_win32_write_debug
winSysInfo DATA

Binary file not shown.

Binary file not shown.

View File

@ -71,6 +71,10 @@ static void registercommands()
cmdnew(cmd, "pause", cbDebugPause, true); //pause debugger
cmdnew(cmd, "memwrite", cbMemWrite, true); //memwrite test
cmdnew(cmd, "StartScylla\1scylla\1imprec", cbStartScylla, false); //start scylla
cmdnew(cmd, "cmt\1cmtset\1commentset", cbInstrCmt, true); //set/edit comment
cmdnew(cmd, "cmtc\1cmtdel\1commentdel", cbInstrCmtdel, true); //delete comment
cmdnew(cmd, "lbl\1lblset\1labelset", cbInstrLbl, true); //set/edit label
cmdnew(cmd, "lblc\1lbldel\1labeldel", cbInstrLbldel, true); //delete label
}
static bool cbCommandProvider(char* cmd, int maxlen)
@ -121,6 +125,8 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit()
while(dir[len]!='\\')
len--;
dir[len]=0;
strcpy(sqlitedb_basedir, dir); //debug directory
PathAppendA(sqlitedb_basedir, "db");
SetCurrentDirectoryA(dir);
gMsgStack=msgallocstack();
if(!gMsgStack)

View File

@ -97,7 +97,7 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>$(SolutionDir)bin\x32\x32_bridge.lib;dbghelp\dbghelp_x86.lib;TitanEngine\TitanEngine_x86.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>$(SolutionDir)bin\x32\x32_bridge.lib;dbghelp\dbghelp_x86.lib;TitanEngine\TitanEngine_x86.lib;sqlite\sqlite32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -112,7 +112,7 @@
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>$(SolutionDir)bin\x64\x64_bridge.lib;dbghelp\dbghelp_x64.lib;TitanEngine\TitanEngine_x64.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>$(SolutionDir)bin\x64\x64_bridge.lib;dbghelp\dbghelp_x64.lib;TitanEngine\TitanEngine_x64.lib;sqlite\sqlite64.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />