【3DS】3DS断点的使用方法
断点环境
3DS进入NTR CFW自制系统 加载游戏的同时按住十字键← 上屏会闪烁几次 然后停在入口点 不会进入游戏
PC端打开NTR Debugger 连接到3DS 连接方式跟之前非断点方式不太一样 命令如下
1 |
connect('3ds的IP地址', 5000 + 0xID编号) |
IP地址就不说了 ID编号也就是游戏所在内存的ID 此时按X+Y打开NTR菜单 选择Process Manager 光标移动到最后 一般倒数第二个或者第三个就是ID编号 可以通过按A键进入后的info菜单中的游戏ID来确定 比如ID编号为00000028 那么上面就填入28即可
连接上之后提示你输入
1 |
continueprocess() |
输入该命令就可以进入游戏了
添加删除断点
1 |
bpadd(addr) |
添加代码断点,如果要添加thumb格式的代码断点,就是
1 |
bpadd(addr,'thumb') |
1 |
bpdis(id) |
禁用代码断点
1 |
bpena(id) |
启用代码断点
可以添加32个
1 |
wpadd(addr) |
添加内存断点,默认是添加一个字宽为4字节的读写断点,如果要指定字宽跟读写属性的话,
1 |
wpadd(addr,'wide','type') |
wide可选'b' 'w' 'dw',代表1字节、2字节、4字节,type可选'l' 's' 'ls',代表读、写、读与写
1 |
wpdis(id) |
禁用内存断点
1 |
wpena(id) |
启用内存断点
因为硬件限制 这里只能添加2个 所以id为0 或者 1
禁用断点后 输入一下命令来恢复游戏运行
1 |
resume() |
如果还是不断触发断点 可以用下面的命令删除内存断点
1 |
wpdel(id) |
查看游戏中某个地址数据的命令为:
1 |
data(0xDDDDDDDD, 100) |
或
1 |
data(0xDDDDDDDD, 0x100) |
DDDDDDD为你所想查看的地址 后面如果直接写100为十进制计算 0x100则按16进制计算显示的数据长度
查看其它寄存器
触发断点后 可以通过以下命令来查看其它寄存器的数值
display()可用来显示一些寄存器信息 具体使用命令如下
1 |
display('single') |
显示s0-s31寄存器的值
1 |
display('double') |
显示d0-d15寄存器的值
以上命令只能在断点触发后使用
显示使用的断点
以下命令用来显示当前存在的断点
1 |
display('breakpoint') |
显示所有breakpoint
1 |
display('watchpoint') |
显示所有watchpoint
这两个命令在未触发断点时也可以使用
单步执行
在触发断点后 可以用以下命令来单步执行
1 |
step() |
可以用resume()来退出单步执行
分析断点
用IDA PRO打开断点所在区域的内存 并通过获得的断点数据来分析