Ollydbg调试多线程程序

今天碰到了一个多线程的程序。一时间没了主意,后面查找了资料总结一下两种可行的方法, 先poll出一个做例子吧:

首先最简单的一种,OD自带的:

勾选这两个选项即可。

 

 勾选完后调用完这个CreateThread直接按F9运行程序

 就发现被断在了kernel32.dll模块里,这也很正常,因为CreateThread就是从这个库里导出的,但是我的目的是调试用户代码。

 然后接着按F9就可以断在用户代码里了, 当然前提是你得在用户代码起始位置下个断点。

 怎么在线程用户代码处下断? CreateThread不是压入了线程函数首地址吗,利用栈内的数据即可。 来看看:

 这种方法有缺点也有优点。优点就是无脑直接怼就行。缺点就是不够灵活,如果我现在想回到主线程调试该怎么办? 还有它会在任何一个新线程创建结束都被断下,有时候很烦人。

下面说说第二种方法:

首先在线程函数下断点:

 接着运行完CreateThread别动

 进入OD的线程窗口,快捷键Alt+T打开,双击你要调试的线程进入

 发现现在在系统领空内,直接按F8

 这样就直接进入了要调试的线程了

 如果说我现在想继续调试主线程或者其他线程该怎么办?直接双击进入

这样你就会发现切换回主线程了

 (完)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
启动 您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序OllyDbg支持即时调试,根本不需要安装,可直接在软盘中运行! 线程 OllyDbg可以调试多线程程序。因此您可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用 GETLASTERROR 返回一样)。 调试DLLs 您可以利用OllyDbg调试标准动态链接库(DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函数。 源码级调试 OllyDbg可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮 OllyDbg的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规[general]、FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。您可以定制个性化高亮方案。 名称 OllyDbg可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/输出符号及名称。Object 扫描器可以识别库函数。其中的名称和注释您可任意添加。如果DLL中的某些函数是通过索引号输出的,则您可通过挂接输入库[import library]来恢复原来的函数名称。不仅如此,OllyDbg还能识别大量的常量符号名(如:窗口消息、错误代码、位域[bit fields]…)并能够解码为已知的函数调用。 已知函数 OllyDbg可以识别 2300 多个C 和Windows API 中的常用函数及其使用的参数。您可以添加描述信息、预定义解码。您还可以在已知函数设定 Log断点并可以对参数进行记录。 函数调用 OllyDbg可以在没有调试信息或函数过程使用非标准的开始部分[prolog]和结尾部分[epilog]的情况下,对递归调用进行回溯。 配置 有多达百余个选项用来设置OllyDbg 的外观和运行。 数据格式:OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCⅡ、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。 运行环境 OllyDbg可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用300-MHz以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上的内存。 支持的处理器 OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。
对于调试64位应用程序,你可以使用OllyDbg的64位版本或者其他支持64位调试的工具。以下是一些基本步骤: 1. 获取OllyDbg 64位版本:你可以在OllyDbg官方网站上下载最新的64位版本。 2. 打开目标程序:启动OllyDbg,并选择要调试的64位应用程序。你可以使用OllyDbg的文件菜单或拖放方式打开目标程序。 3. 设置断点:根据需要,在目标程序中设置断点。你可以通过右键单击代码窗口上的特定行或指令,然后选择"Toggle breakpoint"来设置断点。 4. 开始调试:点击OllyDbg的运行按钮或按下F9键开始调试目标程序程序将在第一个断点处停止。 5. 调试过程中的操作: - 使用F8键逐过程执行代码,或者使用F7键逐语句执行代码。 - 使用F5键继续执行到下一个断点处。 - 使用F2键在代码窗口中设置或删除注释。 - 使用F4键在堆栈窗口中跳转到当前指令的位置。 - 使用Ctrl+G键跳转到指定地址。 6. 查看寄存器和内存:在调试过程中,你可以使用寄存器窗口查看和修改寄存器的值,使用内存窗口查看和修改内存的内容。 请注意,OllyDbg是一个强大的调试器,但对于64位应用程序调试可能会有一些限制。在某些情况下,你可能需要考虑使用其他支持64位调试的工具,如x64dbg、IDA Pro等。此外,要成功地调试64位应用程序,你需要熟悉x86-64指令集和64位程序调试技术。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值