ida动态调试
断点
一般打的都是软件断点
硬件断点的设法:打好断点后

打开找到刚才打下的断点后右键Edit编辑勾选Hardware
差别:
1. 实现原理:
- 软件断点:
- 软件断点是通过修改程序指令来实现的。在代码中插入一个特定的中断指令(例如,在x86架构中是INT 3指令)。
- 调试器会记录被替换的原始指令,并在程序继续执行时恢复它。
- 硬件断点:
- 硬件断点不需要修改程序代码。
2. 资源限制:
- 软件断点:
- 软件断点在数量上没有严格的限制,可以在程序中的任意位置设置。
- 硬件断点:
- CPU提供的硬件断点寄存器数量有限,因此可以同时设置的硬件断点数量也有限。(最多四个)
3. 使用场景:
- 软件断点:
- 软件断点适用于大多数调试场景,特别是在需要设置大量断点时。
- 硬件断点:
- 硬件断点适用于以下场景:
- 调试无法修改代码的程序,例如只读内存中的代码。
- 调试需要精确控制执行流程的程序,例如内核代码或驱动程序。
- 调试数据断点,就是当某个内存地址被读取或者写入的时候出发断点,这是硬件断点特有的功能。
- 硬件断点适用于以下场景:
4. 隐蔽性:
- 软件断点:
- 软件断点会修改程序代码,因此可能会被一些反调试技术检测到。
- 硬件断点:
- 硬件断点不会修改程序代码,因此具有更高的隐蔽性。
总结:
- 软件断点灵活方便,适用于大多数调试场景,但可能会被反调试技术检测到。
- 硬件断点隐蔽性高,适用于特殊调试场景,但数量有限
- 软件断点:
条件断点
条件断点是一种在调试器中设置的断点,它仅在满足特定条件时才会触发。在框位置输入条件

更改字节
选中要更改的那个字节
右键

更改之后Apply patch to 应用这个补丁
elf文件动态调试
1.找到ida的根目录,找到dbgsrv文件,在该文件中找到

根据elf文件的进制选择(以64进制和snake.elf为例)
将linux server64和snake拖入文件夹中
之后在虚拟机终端内输出chmod +x linux_server64赋予文件执行权利
之后输入./linux_server64运行文件(之后等待主机连接)
再打开一个终端输入ip addr获取虚拟机ip地址
检测是否可以成功:
打开主机终端输入 ping +虚拟机ip(下图即为来连接成功)

之后打开Debugger>Process options>

1:填snake在虚拟机中的位置
2:填snake在虚拟机所在文件的文件位置
3:填虚拟机ip
4:运行./linux_server64后,输出Listening on 0.0.0.0:23946(一般默认)
之后就可以正常运行(下次运行时在此运行./linux_server64,并把文件拖入想相同目录即可)
显示所有机器码:
Options>general>改为10

x64dbg
F2:设置断点。)
F4:运行到光标处
F7:单步步入。(遇到call指令,进入call函数的实现处继续执行汇编指令)
F8:单步步过。(遇到call指令,执行call函数,之后接着执行call指令的下一条指令)
F9:运行程序(如果没有碰到断点,程序会一直执行到结束。)
Ctrl+F9: 执行到函数返回处,用于跳出函数实现
Alt+F9:执行到用户代码,用于快速跳出系统函数
Ctrl+G:输入十六进制地址,快速定位到该地址处