Angel实现调试器请求的功能
发布时间:2008/12/23 0:00:00 访问次数:473
(1)报告存储器和处理器状态
angel可以相应设置调试器查看存储器和处理器状态的请求。具体操作过程如下:
当调试器要求查看存储器内容时,angel中的一个函数接收调试器想要查询的存储器的地址,然后将地址范围内的数据以字节流的方式复制到数据缓冲区中,最后数据以adp数据包的形式返回调试器。
在angel得到处理器控制权时,它将各寄存器的数据保存在一个数据块中。当调试器要求查看存储器内容时,保存寄存器值的数据块将被封存在一个adp数据包中,返回到调试器;当调试器请求修改某寄存器内容时,angel'改变数据块中的相应数据;当angel释放对处理器的控制权时,该数据块被写回到各寄存器中。
(2)下载应用程序映像文件
当下载应用程序映像文件到目标系统时,调试器向目标系统上的angel发送一系列的存储器写入adp消息;angel将这些数据写入到存储器中的相应位置。
存储器写入消息比其他的adp消`患都要长。当用户将angel移植到自己的目标系统中时,必须保证系统中的设备驱动程序可以处理长度超过256字节的消息。
存储器写入消息实际的长度可以在移植angel时配置。
(3)设置断点
angel使用3条未定义的指令来实现设置断点。这3条指令的编码如下所示。
·对于little-endian格式的arm程序,使用指令oxetfddefe。
·对于big-endian格式的arm程序,使用指令oxetffdefe。
·对于thu血b程序,使用指令oxdefe。
当调试器在目标代码的某个位置设置一个断点时,angel首先保存该位置原来的指令,然后将该指令替换成一个未定义的指令。
当断点被删除,或者调试器需要查看包含断点在内的存储区域时,angel将未定义指令恢复成原来的指令。
当调试器运行断点处的指令时,angel将未定义指令恢复成原来的指令,并执行该指令。
当angel在应用程序运行过程中检测到一条未定义的指令时,angel执行的操作如下所示。
(1)对于arm程序,读取(lr-4)处的指令;对于thumb程序,读取(lr-2)处的指令。
(2)如果该指令是angel中预定义的用于产生断点的未定义指令,angel将执行下面的操作。
·停止当前应用程序的执行。
·向调试器发送一条消息,包括断点状态。
·循环查询调试器回应的命令。
(3)如果该指令不是angel中预定义的用于产生断点的未定义指令,angel将执行下面的操作。
·向调试器报告遇到了未定义的指令。
·循环查询调试器回应的命令。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
(1)报告存储器和处理器状态
angel可以相应设置调试器查看存储器和处理器状态的请求。具体操作过程如下:
当调试器要求查看存储器内容时,angel中的一个函数接收调试器想要查询的存储器的地址,然后将地址范围内的数据以字节流的方式复制到数据缓冲区中,最后数据以adp数据包的形式返回调试器。
在angel得到处理器控制权时,它将各寄存器的数据保存在一个数据块中。当调试器要求查看存储器内容时,保存寄存器值的数据块将被封存在一个adp数据包中,返回到调试器;当调试器请求修改某寄存器内容时,angel'改变数据块中的相应数据;当angel释放对处理器的控制权时,该数据块被写回到各寄存器中。
(2)下载应用程序映像文件
当下载应用程序映像文件到目标系统时,调试器向目标系统上的angel发送一系列的存储器写入adp消息;angel将这些数据写入到存储器中的相应位置。
存储器写入消息比其他的adp消`患都要长。当用户将angel移植到自己的目标系统中时,必须保证系统中的设备驱动程序可以处理长度超过256字节的消息。
存储器写入消息实际的长度可以在移植angel时配置。
(3)设置断点
angel使用3条未定义的指令来实现设置断点。这3条指令的编码如下所示。
·对于little-endian格式的arm程序,使用指令oxetfddefe。
·对于big-endian格式的arm程序,使用指令oxetffdefe。
·对于thu血b程序,使用指令oxdefe。
当调试器在目标代码的某个位置设置一个断点时,angel首先保存该位置原来的指令,然后将该指令替换成一个未定义的指令。
当断点被删除,或者调试器需要查看包含断点在内的存储区域时,angel将未定义指令恢复成原来的指令。
当调试器运行断点处的指令时,angel将未定义指令恢复成原来的指令,并执行该指令。
当angel在应用程序运行过程中检测到一条未定义的指令时,angel执行的操作如下所示。
(1)对于arm程序,读取(lr-4)处的指令;对于thumb程序,读取(lr-2)处的指令。
(2)如果该指令是angel中预定义的用于产生断点的未定义指令,angel将执行下面的操作。
·停止当前应用程序的执行。
·向调试器发送一条消息,包括断点状态。
·循环查询调试器回应的命令。
(3)如果该指令不是angel中预定义的用于产生断点的未定义指令,angel将执行下面的操作。
·向调试器报告遇到了未定义的指令。
·循环查询调试器回应的命令。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
上一篇:Angel源代码的目录结构
上一篇:Angel的初始化