IDA 教程-WINCE ARM 调试器入门教程

本教程将会展示我们如何对 Windows CE 设备的应用程序进行调试。示例文件可以从这
里下载,这是一个 Windows CE 应用程序的示例,原型由 ljw004 创建(原始文件可在这里找
到)。为了获得最好的反汇编效果,我们将输入文件拷贝到我们的 Windows 机器,并开始一
个新的 PocketPC ARM Executable(File,New):

 

经过向导页面后,我们接受所有默认设置,IDA 将会创建一个数据库来分析输入文件,
我们第一步工作是启动程序来查看它主窗口的 windows 进程.为了找到 windows 进程,我们
只需滚动鼠标找到下面的代码

 

RegisterClassW()注册了一个新窗口类并指定了它的过程。IDA 显示为’loc_11DB8’,我
们在名称上双击跳到这里。为了更好的显示,我们在这里创建一个函数(鼠标右键的弹出菜
单中选择 Create function):

我们将其重新命名如下(按 N 键):

接着,我们在开始处按 F2 设置一个软件断点

 

现在我们准备启动调试器了。非常重要的一点是在启动调试器之前一定要在相应位置设
置断点。为什么?因为,IDA 很难挂起(暂停)一个在 Windows CE 下运行的进程。如果一
个进程在用户模式下执行,那么调试器可以通过在当前执行指令中设置一个断点来挂起它。
然而多数时候进程在执行系统代码,此时调试器无法挂起它,因为系统区域无法被修改。修
改系统代码将会导致频繁崩溃或导致 PDA 挂掉,这就是为什么 IDA 不能让用户在系统区域
设置断点的原因。当前所有在 0x80000000 地址以上的区域和 Core.dll 的代码都被保护。
使我们按 F9 来启动调试器,或者通过菜单(Debugger,Start Process)。IDA 将会连接
到 PDA,如果必要下载调试器服务端到 PDA 并查找输入文件。通常在 PDA 上的输入文件会
被放置在一个与笔记本电脑不同的路径下,因此首次启动调试器时 IDA 无法找到它并会请求
下载

按 Yes 后,IDA 将会下载并在 PDA 上执行这个程序。我们设置的断点会被马上触发

为使显示更清晰,我重命名了局部变量为”Msg_copy”,并使用 Windows 消息号替换了
16 进制数(使用 Edit,Operand types,Enum member 命令来处理)。现在如果你查看 PDA
的屏幕,仍然没有任何变化,我们的程序仍在挂起状态。我们按 F9 继续,断点会被立即重
新触发-WndProc()被频繁调用,这很正常。我们希望通过 WndProc()了解 window 消息如何
被处理,但我们不想每次都按 F9,因此我们考虑将我们断点做个简单的记录。我们右击鼠标
并选择”Edit breakpoint”,在对话框中我们输入断点条件并清除’Break’选项框。

现在我们按 F9,程序会顺利执行不会中断,同时在 PDA 屏幕上显示它的主窗口。在 IDA
的信息窗口将会显示我们需要的 Windows 信息号:

这就是创建和编辑软件断点的方法。你可以在 PDA 中随意操作示例程序,来看一下我们
的记录断点如何工作的。你也可以创建更多的断点并浏览进程内存。整个进程的内存可以在
调试器中获得。你可以通过 Ctro-S 查看内存的段信息。

现在我们再来看一下硬件断点。有时我们想知道何时一个特定的数据被修改。假定我们想
知道在我们的示例程序中哪里访问了我们的文件名字:

我们通过按 F2 键(正如我们创建一个软件断点一样)来创建一个硬件断点。因为光标在
数据区,不是代码区,IDA 会弹出下面的对话框:

我们选择'Hardware breakpoint'选项框并选择的断点模式。我们对读写访问感兴趣。现在
我们通过按 F9 回到应用程序(如果它处于挂起中),并在 PDA 中操作应用程序。敲入文件名
将会触发我们设置的断点。

下面是我们激活断点时的代码:

我们看到是 coredll.dll 库中的 wcscpy()函数。因为它是个系统区域,我们不能在这里创
建断点。即使我们尝试,我们所能得到如下:

请注意断点颜色,它不是红色而是橙色,这意味这这个断点不能被设置(可以通过
Options,Clolors,Debugger 命令设置断点颜色)。因为我们不能在这里设置断点,我们双击
LR 寄存器,它包含了返回地址:

幸运的是,返回地址在用户领空,我们可以在这里创建断点,并按 F9 以获得对程序的控
制。这就是我们创建和使用硬件断点的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值