mirror of
https://github.com/x64dbg/x64dbg.git
synced 2024-11-23 04:50:07 +00:00
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:
parent
5a862a2d1e
commit
eb60123786
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,6 +2,8 @@
|
||||
*/obj/
|
||||
bin/*/*
|
||||
ipch/*
|
||||
x64_dbg_*/Win32/*
|
||||
x64_dbg_*/x64/*
|
||||
|
||||
#global filetypes to ignore
|
||||
*.depend
|
||||
|
34
help/cmt_cmtset_commentset.htm
Normal file
34
help/cmt_cmtset_commentset.htm
Normal 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> arg1: Address to set the comment at (preferably inside a
|
||||
module).</P>
|
||||
<P >
|
||||
|
||||
arg2: Comment text.</P>
|
||||
<P >
|
||||
|
||||
<U>
|
||||
result</U>
|
||||
<BR>
|
||||
This command does not set
|
||||
any result variables.</P></body>
|
29
help/cmtc_cmtdel_commentdel.htm
Normal file
29
help/cmtc_cmtdel_commentdel.htm
Normal 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> arg1: Address of the comment to delete.</P>
|
||||
<P>
|
||||
<U >
|
||||
result</U>
|
||||
|
||||
<BR>
|
||||
This command does not set any result variables.</P></body>
|
33
help/lbl_lblset_labelset.htm
Normal file
33
help/lbl_lblset_labelset.htm
Normal 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> arg1: Address to set the label at (preferably
|
||||
inside a module).
|
||||
</P>
|
||||
<P > arg2: Label text.</P>
|
||||
<P >
|
||||
|
||||
<U>
|
||||
result</U>
|
||||
<BR>This command does not set any result
|
||||
variables.</P></body>
|
22
help/lblc_lbldel_labeldel.htm
Normal file
22
help/lblc_lbldel_labeldel.htm
Normal 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> arg1: Address of the label to delete.</P>
|
||||
<P><U>result</U> <BR>This command does not set any result
|
||||
variables.</P></body>
|
||||
</html>
|
236
help/x64_dbg.wcp
236
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
|
||||
|
||||
|
@ -28,3 +28,4 @@ DBGADDRINFOSET _dbg_addrinfoset;
|
||||
DBGBPGETTYPEAT _dbg_bpgettypeat;
|
||||
DBGGETREGDUMP _dbg_getregdump;
|
||||
DBGVALTOSTRING _dbg_valtostring;
|
||||
DBGMEMISVALIDREADPTR _dbg_memisvalidreadptr;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -1,6 +1,8 @@
|
||||
#include "_global.h"
|
||||
|
||||
HINSTANCE hInst;
|
||||
char sqlitedb_basedir[deflen]="";
|
||||
char dbpath[deflen]="";
|
||||
|
||||
void* emalloc(size_t size)
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
207
x64_dbg_dbg/sqlite/sqlite.def
Normal file
207
x64_dbg_dbg/sqlite/sqlite.def
Normal 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
|
BIN
x64_dbg_dbg/sqlite/sqlite32.lib
Normal file
BIN
x64_dbg_dbg/sqlite/sqlite32.lib
Normal file
Binary file not shown.
BIN
x64_dbg_dbg/sqlite/sqlite64.lib
Normal file
BIN
x64_dbg_dbg/sqlite/sqlite64.lib
Normal file
Binary file not shown.
@ -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)
|
||||
|
@ -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" />
|
||||
|
Loading…
Reference in New Issue
Block a user