文件管理 · 2023年8月17日

od怎么调试非pe文件|怎么用od调试一个多线程的程序

⑴ od是补丁吗

od是补丁。od是内嵌补丁的核心是,在没有代码处程序只是为了填满内存写上代码一般是赋值,利用程序跳出再跳回去实现,写的时候与源程序保持一点距离,优势解决在程序上直接写代码后面代码被覆盖的情况,OD调试技巧经验。

内嵌补丁的特点

判断跳转,不等于跳转,有时间限制在killTimer下断点,程序用switch语句判断输入是否正确,跳出switch语句,ResettoolbarsSetting意味着重新建立窗口,跳出循环,vc程序初始是pushebp,利用堆栈搜索破解,记录一个调试,利用堆栈找到dialog弹窗。

内嵌补丁,将循环次数写在PE文件的数据区,利用nonawrite插件写汇编指令跳出来再跳回去,dialogbo模态函数createdialo非模态函数,这两个函数都是从后往前执行,所以执行句柄是最后一步操作,这就可以从后往前找到弹窗函数。

⑵ 怎么用od调试一个多线程的程序

在 OD 里调试则不行,只要被断,只能有一个线程活动,其他的会被挂起,这本来是 OD 的弱点,对付不了多线程 。od 可以单独挂起线程的, 可以单独让一个run 一下, 然后停下, 调试另外一个, 其实也不错, 单cpu 也就是这么工作的. 要求不高的时序模拟可以了.

⑶ 如何用OD调试windows服务程序

第一方法: 这种方法其实说起来不叫调试,也是一种笨办法,就是用MessageBox把一些程序的中间信息输出来,方便你找出程序是在哪个地方出问题了,你也可以在try catch中使用,用MessageBox把异常弹出来,这种方法也比较直观。可惜,实现起来也有问题。我们首先要添加using System.Windows.Forms;的引用,然后加上一行代码MessageBox.Show(ex.ToString(), "Error");本以为这样说行了,可是把服务重新编译生成,并安装启动后,它并没有弹出框来。百思不得其解。幸好,在服务的程序里面,启用了系统的日志,它会把相关的异常记录到系统日志中去,在“计算机管理”的“事件查看器”里面可以找到。果然发现了一个, 显示的信息是 “当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。” 直接网络,找到了一个答案,原来是调用MessageBox时,还需要设置它的MessageBoxOptions属性为DefaultDesktopOnly。修改如下:MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); 然后再次重新编译,安装并启动,OK,顺利的弹出了错误的信息。 第二种方法: 第二种方法就是真正的调试,其实Windows服务还是可以调试的,应该说任何一种类型的程序都应该能调试,别人在开发编译器的时候就人考虑到的。下面来看具体的方法。 我们知道,任何一个程序都有一个对应的进程,如果你的Windows服务启动后,也会有一个对应的进程。通过任务管理器,就能看到。 我们可以通过VS编译器里面,提供的“附加到进程”这个功能来进行调试。首先你打开你的Windows服务源程序,在里面设置一个断点,例如在OnStart方法中protected override void OnStart(string[] args){}中,然后把你的服务启动,启动过后,在VS的“调试”一栏中找到“附加到进程” 在进程列表里面找到你的进程, 如果没有的话,就把左下角的“显示所有用户的进程”前面的勾选中,然后你就可以找到你的Windows服务的进程了,然后点击确定即可。 点击确定后,可能你等了半天,也没看见它命中断点。哈哈,不要急,前面说漏了一点,我们是先启动的服务,然后再附加的进程,因为服务一启动,就会执行OnStart方法,这时,我们还没有把这个服务的进程附加到VS中去呢?所以在OnStart方法中设置的这个断点肯定不会命中。所以我们需要想个办法,也就是加一个定时器,我们在OnStart方法中启动这个定时器,然后设置这个定时器的时间间隔为1分钟,然后在这个定时器的事件中去设置一个断点。这样把服务重新生成,安装并启动后,把这个进程附加到VS中去,1分钟过后,你就会看到,它命中了断点。不过有一个前提就是,你必须在1分钟内把这个进程附加到VS中去,否则的话,它还是命中不了。 如果还有问题的话,就检查一下,看你的Windows服务是不是在Release模式下生成的,如果是的话,要把它改成在Debug模式下生成。