返回
x64dbg v2023.01.25 免费版

x64dbg

立即下载

小编提示:PC版不适合移动端,如下载有问题点击反馈!

软件介绍

x64dbg是一款专业的程序调试软件。程序调试工具中的佼佼者x64dbg。该工具主要在QT平台上编写,用于调试x64和X32应用程序。整个用户界面不清楚,功能模块分布整齐;它具有所有用户都将使用的内置功能。它为用户提供了一个DBG模块。该模块主要是为调节器而设置的,它可以在调试器中组织数据并为GUI提供所需的数据信息。内部GUI构建在子QT之上,可以为用户提供数据交互。该程序系统为用户提供可执行文件和源代码,可以随时为您提供服务。用户可以在使用此工具时编写脚本。它具有集成的,可调试的且类似于ASM的脚本语言。需要它的用户可以下载Experience

软件功能:

1.开源

2.直观,熟悉的新用户界面

3.类C表达式解析器

4.DLL和exe文件全功能调试(TitanEngine)

5.类似IDA的侧边栏和跳跃箭头

6.类似IDA的指令令牌突出显示(突出显示寄存器等)

7.内存映射

8.象征主义

9.线程视图

10.内容敏感的注册视图

11.完全可自定义的配色方案

12.动态识别模块和字符串

13.进口重建一体化(蓝蟹)

14.快速拆卸(BeaEngine)

15.用户数据库(JSON),用于注释,标签,书签等。

16.支持不断增长的API插件

17.可扩展和可调试的脚本语言自动化

18.多种数据类型的内存转储

19.基本调试符号(PDB)支持

20.动态堆栈视图

21.内置程序集(XEDParse)

22.查看补丁并将其保存到磁盘

23.内置十六进制编辑器

安装步骤:

1.用户可以单击本网站提供的下载路径下载相应的程序安装包

x64dbg

2.只需使用解压功能打开压缩包,双击主程序进行安装,弹出程序安装界面

x64dbg

3.只需单击与您的计算机系统相同的处理位,即可在32位和64位之间选择

x64dbg

软件特色:

1.搜索记忆模式

2.积极发展

3.x64_dbg正在持续积极的发展中

4.GPLv3

5.我们还提供可执行文件和源代码。随时贡献

6.定制

7.用C ++编写的插件,更改颜色并调整您的首选项

8.X64 / X32支持

9.x64_dbg可以调试x64和X32应用程序。只有一个界面

10.建立在开源库上

11.x64_dbg使用了Qt,TitanEngine,BeaEngine,蓝蟹,Yang Song,LZ4和XEDParse

12.操作简单,开发功能强大

13.x64_dbg使用C ++和Qt4快速添加新功能

14.脚本

15.x64_dbg具有集成的,可调试的,类似于ASM的脚本语言

16.社区意识

17.x64_dbg具有许多逆转社会思想或创造的功能

18.伸缩

19.编写插件以添加脚本命令或集成工具

使用说明:

表达式函数您可以在表达式中使用函数。调试器定义以下功能:

GUI交互式disasm.sel()/ dis.sel():在反汇编视图中获取选定的地址。

Dump.sel():在转储视图中获取选定的地址。

Stack.sel():在堆栈视图中获取选定的地址

源src.disp(addr):获取addr相对于最后一个源行的位移。

Src.line(addr):获得的源行号addr。

Module mod.party(addr):获取模块的聚会地址。 0是用户模块,1是系统模块。

Mod.base(addr):获取模块的基址addr。

Mo.size(addr):获取模块的大小地址。

Mod.hash(addr):获取模块的哈希值addr。

Mo.entry(addr):获取模块的入口地址addr。

Mod.system(addr):如果at的模块addr是系统模块,则为true。没有模块是用户模块。

Md.user(addr):如果at的模块addr是用户模块,则为true。没有模块是用户模块。

Mod.main():返回主模块的基础知识(调试)。如果这是一个DLL,它将在加载之前返回0。

Mod.rva(addr):获得的RVA地址。如果addr不在模块内部,它将返回0。

Mod.offset(addr):获取的文件偏移量addr。如果addr不在模块内部,它将返回0。

Mod.isexport(addr):如果addr是从模块导出的函数,则为true。

处理信息peb():获取PEB的地址。

Teb():获取TEB地址。

Tid():获取当前线程ID。

常规bswap(值):字节交换值。

三元(condition,val1,val2):如果condition不为零,则返回val1,否则返回val2。

GtTickCount():x64dbg的刻度计数。

memory mem.valid(addr):如果addr是有效的内存地址,则为True。

Mm.base(addr):返回的内存页面的基本addr(可以根据您的内存映射模式进行更改)。

Mem.size(addr):返回的内存页面大小addr(可以根据您的内存映射模式进行更改)。

Mem.iscode(addr):如果addr页是可执行的,则为true。

Mm.decodepointer(ptr):等效于在DecodePointer上调用API ptr,仅在Vista +上有效。

反汇编dis.len(addr):获取指令的长度addr。

Dis.iscond(addr):如果at处的指令addr是条件分支,则为true。

Dis.isbranch(addr):如果at处的指令addr是分支(jcc / call),则为true。

Dis.isret(addr):如果at的指令是,则addr为true ret。

Dis.iscall(addr):如果at的指令是,则addr为true调用。

Dis.ismem(addr):如果指令addr具有存储操作数,则为true。

Dis.isnop(addr):如果at的指令addr等效于NOP,则为true。

Dis.isunusual(addr):如果at的命令addr异常,则为true。

Dis.branchdest(addr):指令的跳转目标位于addr(如果在其上按Enter,将显示以下内容)。

Dis.branchexec(addr):如果addr要执行分支,则为true。

Dis.imm(addr):指令的立即值addr。

Dis.brtrue(addr):指令的分支目标是addr。

Dis.brfalse(addr):如果下一条指令addr是条件分支,则下一条指令的地址。

Dis.next(addr):addr的下一条指令的地址。

Dis.prev(addr):上一条指令的地址addr。

Dis.iscallsystem(addr):如果at命令addr进入系统模块,则为true。

跟踪记录tr.enabled(addr):如果启用了跟踪记录,则它是真实的addr。

Tr.hitcount(addr):记录在跟踪地址中的命中数。

Tr.runtraceenabled():如果启用了运行跟踪,则为True。

字节/字/双字/四字/ PTR ReadByte,Byte,byte(addr):从中读取字节addr并返回值。

ReadWord,Word,word(addr):从其中读取一个单词(2个字节)addr并返回值。

ReadDword,Dword,dword(addr):从中读取一个双字(4字节)addr并返回值。

ReadQword,Qword,qword(addr):从其中读取一个qword(8个字节)addr并返回值(仅在x64上可用)。

ReadPtr,ReadPointer,ptr,Pointer,pointer(addr):从中读取指针(4/8字节)addr并返回值。

func.start()函数:函数addr的开头是一部分,否则为零。

Func.end():函数addr的结尾是其中的一部分,否则为零。

参考ref.count():当前参考视图中的条目数。

Ref.addr(index):在此处获取参考地址索引。零故障。

参假定返回地址在堆栈上(例如,您在函数内部)。

Argget(index):从索引获取参数(从零开始)。

Ag.set(index,value):将index(从零开始)的参数设置为value。

异常这是一组函数,用于获取有关最后一个异常的信息。它们可用于异常断点以构建更高级的条件。

Ex.firstchance():最后一个异常是否是第一次机会异常。

Ex.addr():最后一个异常地址。

Ex.code():最后一个异常代码。

Ex.flags():最后一个异常标志。

Ex.infocount():最后一次异常信息计数(参数数量)。

Ex.ifo(index):最后一个异常信息,如果索引超出范围,则为零。

变量该程序支持变量。变量分为三种:

USER:用户使用var命令创建的变量。这些变量没有访问限制。

SYSTEM:可以读写系统创建的变量,但不能删除。

READONLY:可以读取系统创建的变量,但不能写入或删除。

保留变量有一些保留变量:

$ res / $ result:一般结果变量。

$ resN / $ resultN:其他可选结果变量(N = 1-4)。

$ pid:调试后的可执行文件的进程ID。

$ hp / $ hProcess:用于调试的可执行句柄。

$ lastalloc:alloc命令的最终结果。

$ breakpointcondition:控制条件断点命令中的暂停行为。

$ breakpointcounter:在评估条件断点的条件之前设置断点的命中计数器。

$ breakpointlogcondition:条件断点的日志条件。它不能用于控制日志记录行为。

条件断点

操作概述遇到断点时,x64dbg将执行以下操作:

如果断点是异常断点,则将系统变量$ breakpointexceptionaddress设置为异常地址;否则,将系统变量$ breakpointexceptionaddress设置为异常地址。否则,将系统变量设置为异常地址。

增加命中计数器;

将系统变量$ breakpointcounter设置为值o

f点击柜台;

如果设置了中断条件,则对表达式求值(默认为1);否则为0。

如果设置了快速恢复,并且中断条件的值为0:

恢复调试对象的执行(跳过后续步骤)。这也将跳过插件回调和GUI更新的执行。

如果设置了日志条件,则对表达式求值(默认为1);否则为0。

如果设置了命令条件,则对表达式求值(默认为中断条件);

如果中断条件的值为1(或除“ 0”以外的任何值):

打印标准日志消息; (如果将断点设置为静默,则禁止使用标准日志消息。)

执行插件回调。

如果设置了日志文本,并且日志条件评估为1(或“ 0”以外的任何值):

格式化并打印日志文本(请参阅字符串格式)。

如果设置了命令文本,并且命令条件评估为1:

设置系统变量$ breakpointcondition

设置为中断条件;

将系统变量$ breakpointlogcondition设置为log condition;

在命令文本中执行命令;

断点条件将设置值$ breakpointcondition。因此,如果您在脚本中修改此系统变量,则可以控制调试对象是否将中断。

如果中断条件的值为1(或除“ 0”以外的任何值):

中断调试目标并等待用户恢复。

点击计数器点击计数器记录达到断点的次数。即使在此断点上启用了快速恢复,它也会无条件地增加。可以在断点视图中查看它,并使用ResetBreakpointHitCount对其进行重置。

record可以使用x64dbg格式的日志来记录程序的当前状态。有关如何格式化日志字符串,请参阅格式化。

注意可以使用GUI来设置条件断点,方法是先设置软件断点(键F2),然后右键单击指令,然后从上下文菜单中选择“编辑断点”命令。根据需要填写条件表达式和/或其他信息,然后确认并关闭对话框

例如,您不应在breakpoint命令中运行可更改调试对象的运行状态的命令,因为在此处使用这些命令时,它们是不稳定的。您可以改用中断条件,命令条件或$ breakpointcondition。

如果您不知道条件将在哪里变为真,请尝试使用条件跟踪!

条件断点示例,永不中断

损坏条件:0

仅在EAX和ECX都等于1时才中断的条件断点。

损坏条件:EAX == 1 && ECX == 1

仅当EAX是有效地址时才会中断的条件断点

损坏条件:mem.valid(EAX)

条件断点,在第三次命中时被中断

中断条件:$ breakpointcounter == 3或($ breakpointcounter%3)== 0

一个条件断点,只有在执行线程1C0时才会被中断

条件跟踪

操作概述执行跟踪步骤时,x64dbg将执行以下操作:

增加跟踪计数器;

将系统变量$ tracecounter设置为跟踪计数器的值;

如设置了中断条件,则对表达式求值(默认为0);否则为0。

执行插件回调(允许插件更改中断条件);

如果设置了日志条件,则对表达式求值(默认为1);否则为0。

如设置了命令条件,则对表达式求值(默认为中断条件);

如果设置了开关条件,则对表达式求值(默认为0)

如果设置了日志文本,并且日志条件评估为1:

格式化并打印日志文本(请参阅字符串格式)。要将日志重定向到文件,请使用TraceSetLogFile。

如果设置了命令文本,并且命令条件评估为1:

将系统变量$ tracecondition设置为中断条件;

将统变量$ tracelogcondition设置为log condition;

将系统变量$ traceswitchcondition设置为切换条件;

在命令文本中执行命令;

断条件将设置值$ tracecondition。因此,如果您在脚本中修改此系统变量,则可以控制调试对象是否将中断。

的开关状态将设置为$ traceswitchcondition的值。因此,如果您在脚本中修改此系统变量,则可以控制是否切换步骤类型。

如果中断条件的值为1:

打印标准日志消息;

中断调试目标并等待用户恢复。

如果将切换条件评估为1:

切换(反向)步进类型。如果您想跟踪,它将切换到输出(反之亦然)。例如,这允许您不跟踪有条件的系统模块调用或不跟踪某些调用。 mod.party(dis.branchdest(cip))== 1

record可以使用x64dbg格式的日志来记录程序的当前状态。有关如何格式化日志字符串,请参阅格式化。如果要查找记录的地址和所有已跟踪指令的反汇编,则可以使用它。要将日志重定向到文件,请使用TraceSetLogFile。 {p:cip} {i:cip}

跟踪记录如果使用了基于跟踪记录的跟踪选项之一,则对中断条件的初始评估包括您指定的跟踪记录跟踪的类型。正常中断条件可用于在满足跟踪记录条件之前进行中断。如果要在条件中包括跟踪记录以进行完全控制,则可以使用表达式函数。

注意您可以通过“调试”菜单中的“直到条件跟踪” /“直到条件跟踪条目”命令开始条件跟踪。

您不应在breakpoint命令中运行可更改调试对象的运行状态的命令

(例如),因为在此处使用这些命令时不稳定。 您可以改用中断条件,命令条件或$ tracecondition。

精品推荐
猜你喜欢
用户评论