diff --git a/.gitignore b/.gitignore index 6e6e0ba5..4a377749 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ */obj/ bin/*/* ipch/* +x64_dbg_*/Win32/* +x64_dbg_*/x64/* #global filetypes to ignore *.depend diff --git a/help/cmt_cmtset_commentset.htm b/help/cmt_cmtset_commentset.htm new file mode 100644 index 00000000..bcc61ab3 --- /dev/null +++ b/help/cmt_cmtset_commentset.htm @@ -0,0 +1,34 @@ + + + +cmt/cmtset/commentset + + + + + + + +

cmt[,cmtset,commentset]
Set a +comment.

+

+ +arguments +
  arg1: Address to set the comment at (preferably inside a +module).

+

+   +arg2: Comment text.

+

+ + +result +
+ This command does not set +any result variables.

\ No newline at end of file diff --git a/help/cmtc_cmtdel_commentdel.htm b/help/cmtc_cmtdel_commentdel.htm new file mode 100644 index 00000000..bd497db6 --- /dev/null +++ b/help/cmtc_cmtdel_commentdel.htm @@ -0,0 +1,29 @@ + + + +cmtc/cmtdel/commentdel + + + + + + + +

cmtc[,cmtdel,commentdel]
Delete a comment.

+

+ +arguments + +
  arg1: Address of the comment to delete.

+

+ + result + +
+This command does not set any result variables.

diff --git a/help/lbl_lblset_labelset.htm b/help/lbl_lblset_labelset.htm new file mode 100644 index 00000000..db7deb05 --- /dev/null +++ b/help/lbl_lblset_labelset.htm @@ -0,0 +1,33 @@ + + + +lbl/lblset/labelset + + + + + + + +

lbl[,lblset,labelset]
Set a label.

+

+ +arguments + + +
  arg1: Address to set the label at (preferably +inside a module). +

+

  arg2: Label text.

+

+ + +result +
This command does not set any result +variables.

\ No newline at end of file diff --git a/help/lblc_lbldel_labeldel.htm b/help/lblc_lbldel_labeldel.htm new file mode 100644 index 00000000..92f598a5 --- /dev/null +++ b/help/lblc_lbldel_labeldel.htm @@ -0,0 +1,22 @@ + + + +lblc/lbldel/labeldel + + + + + + + +

lblc[,lbldel,labeldel]
Delete a label.

+

arguments
  arg1: Address of the label to delete.

+

result
This command does not set any result +variables.

+ \ No newline at end of file diff --git a/help/x64_dbg.wcp b/help/x64_dbg.wcp index 84e06e42..e99db68a 100644 --- a/help/x64_dbg.wcp +++ b/help/x64_dbg.wcp @@ -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 diff --git a/x64_dbg_bridge/_global.cpp b/x64_dbg_bridge/_global.cpp index c70df78b..91dd66e3 100644 --- a/x64_dbg_bridge/_global.cpp +++ b/x64_dbg_bridge/_global.cpp @@ -28,3 +28,4 @@ DBGADDRINFOSET _dbg_addrinfoset; DBGBPGETTYPEAT _dbg_bpgettypeat; DBGGETREGDUMP _dbg_getregdump; DBGVALTOSTRING _dbg_valtostring; +DBGMEMISVALIDREADPTR _dbg_memisvalidreadptr; diff --git a/x64_dbg_bridge/_global.h b/x64_dbg_bridge/_global.h index 7b4c1b9a..4beac1f4 100644 --- a/x64_dbg_bridge/_global.h +++ b/x64_dbg_bridge/_global.h @@ -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 diff --git a/x64_dbg_bridge/bridgemain.cpp b/x64_dbg_bridge/bridgemain.cpp index c5ded808..b0864e48 100644 --- a/x64_dbg_bridge/bridgemain.cpp +++ b/x64_dbg_bridge/bridgemain.cpp @@ -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) { diff --git a/x64_dbg_bridge/bridgemain.h b/x64_dbg_bridge/bridgemain.h index 30022ced..564b15fb 100644 --- a/x64_dbg_bridge/bridgemain.h +++ b/x64_dbg_bridge/bridgemain.h @@ -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); diff --git a/x64_dbg_dbg/_exports.cpp b/x64_dbg_dbg/_exports.cpp index b8ae58c0..ab2db1a7 100644 --- a/x64_dbg_dbg/_exports.cpp +++ b/x64_dbg_dbg/_exports.cpp @@ -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) diff --git a/x64_dbg_dbg/_exports.h b/x64_dbg_dbg/_exports.h index 7c5ff7ef..3a29e740 100644 --- a/x64_dbg_dbg/_exports.h +++ b/x64_dbg_dbg/_exports.h @@ -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(); diff --git a/x64_dbg_dbg/_global.cpp b/x64_dbg_dbg/_global.cpp index 9174f1e5..73b3d43c 100644 --- a/x64_dbg_dbg/_global.cpp +++ b/x64_dbg_dbg/_global.cpp @@ -1,6 +1,8 @@ #include "_global.h" HINSTANCE hInst; +char sqlitedb_basedir[deflen]=""; +char dbpath[deflen]=""; void* emalloc(size_t size) { diff --git a/x64_dbg_dbg/_global.h b/x64_dbg_dbg/_global.h index 1c85acbb..dbc91720 100644 --- a/x64_dbg_dbg/_global.h +++ b/x64_dbg_dbg/_global.h @@ -16,6 +16,7 @@ #include #include #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); diff --git a/x64_dbg_dbg/addrinfo.cpp b/x64_dbg_dbg/addrinfo.cpp index 33652c85..5dd227f0 100644 --- a/x64_dbg_dbg/addrinfo.cpp +++ b/x64_dbg_dbg/addrinfo.cpp @@ -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; ihProcess, 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; ihProcess, 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; +} diff --git a/x64_dbg_dbg/addrinfo.h b/x64_dbg_dbg/addrinfo.h index 18e20453..7e8f8d5f 100644 --- a/x64_dbg_dbg/addrinfo.h +++ b/x64_dbg_dbg/addrinfo.h @@ -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 diff --git a/x64_dbg_dbg/debugger.cpp b/x64_dbg_dbg/debugger.cpp index 4b75d386..ae55cbe0 100644 --- a/x64_dbg_dbg/debugger.cpp +++ b/x64_dbg_dbg/debugger.cpp @@ -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 diff --git a/x64_dbg_dbg/instruction.cpp b/x64_dbg_dbg/instruction.cpp index fc043bf0..713fde3f 100644 --- a/x64_dbg_dbg/instruction.cpp +++ b/x64_dbg_dbg/instruction.cpp @@ -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; +} diff --git a/x64_dbg_dbg/instruction.h b/x64_dbg_dbg/instruction.h index 3d903792..48d7f7ec 100644 --- a/x64_dbg_dbg/instruction.h +++ b/x64_dbg_dbg/instruction.h @@ -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 diff --git a/x64_dbg_dbg/memory.cpp b/x64_dbg_dbg/memory.cpp index abf3cee9..0f149271 100644 --- a/x64_dbg_dbg/memory.cpp +++ b/x64_dbg_dbg/memory.cpp @@ -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); diff --git a/x64_dbg_dbg/memory.h b/x64_dbg_dbg/memory.h index 56dfcff1..aaf52e7e 100644 --- a/x64_dbg_dbg/memory.h +++ b/x64_dbg_dbg/memory.h @@ -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 diff --git a/x64_dbg_dbg/sqlite/sqlite.def b/x64_dbg_dbg/sqlite/sqlite.def new file mode 100644 index 00000000..f3867f32 --- /dev/null +++ b/x64_dbg_dbg/sqlite/sqlite.def @@ -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 diff --git a/x64_dbg_dbg/sqlite/sqlite32.lib b/x64_dbg_dbg/sqlite/sqlite32.lib new file mode 100644 index 00000000..26f10110 Binary files /dev/null and b/x64_dbg_dbg/sqlite/sqlite32.lib differ diff --git a/x64_dbg_dbg/sqlite/sqlite64.lib b/x64_dbg_dbg/sqlite/sqlite64.lib new file mode 100644 index 00000000..5c1c114c Binary files /dev/null and b/x64_dbg_dbg/sqlite/sqlite64.lib differ diff --git a/x64_dbg_dbg/x64_dbg.cpp b/x64_dbg_dbg/x64_dbg.cpp index 326af016..20e1b0c9 100644 --- a/x64_dbg_dbg/x64_dbg.cpp +++ b/x64_dbg_dbg/x64_dbg.cpp @@ -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) diff --git a/x64_dbg_dbg/x64_dbg_dbg.vcxproj b/x64_dbg_dbg/x64_dbg_dbg.vcxproj index 10039474..4d8f19f6 100644 --- a/x64_dbg_dbg/x64_dbg_dbg.vcxproj +++ b/x64_dbg_dbg/x64_dbg_dbg.vcxproj @@ -97,7 +97,7 @@ Windows true true - $(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) + $(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) @@ -112,7 +112,7 @@ Windows true true - $(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) + $(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)