如何用OD调试windows服务程序
1、调试windows 服务是system级别的所有在win7或win8下一定要以管理员身份启动,启动后添加新建项目windows服务
确定就建立了一个windows服务程序
2、程序入口点自然在program中 main函数 跟控制台程序有点相似
static class Program
{
///
/// 应用程序的主入口点。
///
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
创建步骤如下:
1. 新建一个项目
2. 从一个可用的项目模板列表当中选择Windows服务
3. 设计器会以设计模式打开
4. 从工具箱的组件表当中拖动一个Timer对象到这个设计表面上 (注意: 要确保是从组件列表而不是从Windows窗体列表当中使用Timer)
5. 设置Timer属性,Enabled属性为False,Interval属性30000毫秒
6. 切换到代码视图页(按F7或在视图菜单当中选择代码),然后为这个服务填加功能。
这种方法其实说起来不叫调试,也是一种笨办法,就是用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模式下生成。
win7下可用的od
1、打开百度搜索win7 od软件。2、根据需要点击相应的页面下载即可。OD,软件名称,反汇编工具OD=OllyDebug,一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3 级的调试器,己代替SoftICE成为当今最为流行的调试解密工具了。同时还支持插件扩展功能,是目前最强大的调试工具。基本上,调试自己...
OD里面地址是怎么看的?
od是win32位下的调试器,调试32位程序用的。你上微机原理课讲的应该是16位汇编的内容,在16位汇编下,地址是用段地址和偏移地址决定的。在windows环境下,内存不分段,每个程序都加载在一个独立4G的地址空间中。低2G是用户程序。在这个地址空间中,可以直接用偏移值确定地址。至于段偏移地址,则不用讨...
"OD调试"是什么意思
1.调试工具softice 2.调试工具Trw2000 3.反汇编工具Wdasm8.93 4.Hiew 5.Visual Basic程序调试工具Smartcheck 6.十六进制编辑器(如:Ultraedit、WinHex、Hex Workshop 等)7.注册表监视工具RegShot、regmon或RegSnap 8.侦测文件类型工具TYP、gtw或FileInfo等 9. 脱壳工具PROCDUMP 10.调试工具IceDump ...
win10开启od加速有什么用?
如果玩fps游戏,可以开启该功能,开启od加速后,显示器的响应速度会变快,可以实现1ms灰阶响应时间,可以降低游戏过程中的卡顿现象,od表示“OverDrive”,就是超频的意思。电脑使用技巧:1、电脑开机慢,可以清理磁盘,在win10系统下右键单击“windows”图标,点击“磁盘管理”,根据提示清理即可。2、电脑打...
win7下32位汇编OD能不能代替softice和w32dasm?
其实OD,CE这些反汇编工具,都有一定的编译能力,但是你不能把他们当做编译器来用,OD,CE这些比较适合看反汇编代码,例如Debug这些调试软件都具有像OD一样的反汇编能力,只是调试工具是用来学习的,而OD这些一般是给反汇编人员用的工具
怎么学习ollydbg?原理是什么?基本使用方法是什么?
Explorer,按“Add OllyDbg to menu in Windows Explorer”。以后你可以右击可执行文件点选OllyDbg。这个选项创建注册表键HKEY_CLASSES_ROOT\/exefile\/shell\/Open with OllyDbg andHKEY_CLASSES_ROOT\/exefile\/shell\/Open with OllyDbg\/commandOllyDbg可以调试控制台(基于文本)程序。注意:WindowsNT或Windows2000下,你必须...
win7系统OD调试加VMP壳的程序为什么会自动重起或关机
1、进入CMOS,在电源管理菜单中,PME Event Wake up(PME事件唤醒)应为Disable,点我的电脑,属性,高级,设置,关闭系统失败自动重启功能。2、软件不兼容,常常会引起关机重起的问题,这是XP的新机制。解决办法:右键点击“我的电脑”,选属性。选择“高级”选项卡,找到“启动和故障恢复”,点击旁边的...
od进栈和出栈是什么意思
通常是调用系统api时候用 win32汇编按照stdcall的约定,用栈来传参,函数最后一个参数最先入栈 比如MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);汇编的写法是 push uType push lpCaption push lpText push hWnd call MessageBoxA 其次的作用是临时保存数据 od右下角的框框...
Win32.Hack.Surila.k修复
在反调试保护下,设置VirtualAlloc+?的断点,确保避开壳层检测。使用Ctrl+F9回到用户进程,然后在硬件执行层面设置断点,定位到3A78A0地址。这个地址可以通过分析程序的API调用来获取,例如查找像0A21398这样的指令,找到API调用的地址3A8394,然后用OD工具在内存中设置断点,执行后搜索特定指令找到3A78A0。3...
怎么用OD修改某软件窗体标题?
方法很多 实现的途径也很多 OD直接该也可以,找到标题字符串存放的位置 修改下,就OK,这种方法适用于无壳 动态设置标题 字符串未加密情况,如果标题是直接写在资源里,那可以用reskack这款软件搞定,当然 16进制编辑器也不错! 本回答由电脑网络分类达人 刘聪聪推荐 举报| 答案纠错 | 评论 3 3 其他...
校鹏康得: 第一方法: 这种方法其实说起来不叫调试,也是一种笨办法,就是用MessageBox把一些程序的中间信息输出来,方便你找出程序是在哪个地方出问题了,你也可以在try catch中使用,用MessageBox把异常弹出来,这种方法也比较直观.可惜...
满城县18528132841: 怎么调试windows服务程序 - ?
校鹏康得: 若要调试服务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中.然后可以使用 Visual Studio 的所有标准调试功能来调试应用程序.例如,如果附加到 WinLogon 进程,然后停止调试,系统就会暂停,因为没有 WinLogon,...
满城县18528132841: OD的隐藏调试器怎么用 - ?
校鹏康得: 关闭实时调试的方法有两种: 1、打开IE浏览器然后选择工具- internet选项-高级,把“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(其它)”前面打上对钩.确定即可. 2、开始---运行,msconfig,回车,打开系统配置实用程序.再服务选项卡中...
满城县18528132841: 如何将OD设置为系统调试器? - ?
校鹏康得: 选项-及时调试设置-设置为及时调试器
满城县18528132841: 怎么用od调试一个多线程的程序 - ?
校鹏康得: 在 OD 里调试则不行,只要被断,只能有一个线程活动,其他的会被挂起,这本来是 OD 的弱点,对付不了多线程 .od 可以单独挂起线程的, 可以单独让一个run 一下, 然后停下, 调试另外一个, 其实也不错, 单cpu 也就是这么工作的. 要求不高的时序模拟可以了.
满城县18528132841: 如何:调试 Windows 服务应用程序 - ?
校鹏康得: 由于服务必须从服务控制管理器的上下文中运行,而不是从 Visual Studio .NET 中运行,因此调试服务不像调试其他 Visual Studio 应用程序类型那样简单.若要调试服务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中.然...
满城县18528132841: 如何调用 windows服务的自定义方法 - ?
校鹏康得: 比较简单的方法:直接在OnStart方法加入以下代码 System.Diagnostics.Debugger.Launch();编译后发布服务, 管理员身份运行 VS, 启动服务. 之后会提示你选择调试程序, 选择 VS.或者, 新建单元测试程序, 直接调试服务方法
满城县18528132841: VS C# 怎么调试调试服务? - ?
校鹏康得: 调试Windows服务比普通应用程序要困难些,需要很多步骤.服务不能像普通应用程序那样在开发环境中直接执行来调试,它必须先安装并启动.一旦启动了它,你可以用Visual Studio附加到进程来调试代码.记住,对Windows服务做的任何改...
满城县18528132841: OD调试怎么用条件断点 - ?
校鹏康得: 在“窗口”》“重置窗口布局”也可以恢复到默认窗口布局. 关于VS调试: 1.设置断点 按F5 进行调试时 你可以在“局部变量”窗口中查看所有该方法中的变量,当运行的该变量时 会 显示红色, 2.如果你的变量太多你也可以只监视你所需要的:在“监视1”窗口中设置你要监视的变量 该窗口中有“名称”“值”两列.名称是你要监视的变量单击设置你要监视的变量如:“a” .监视的窗口可以添加多个 在监视1窗口中右击选中“添加监视”就回添加一个监视窗口了.这样可以查看你的变量3.你也看直接在代码编辑窗口中直接查看你想要查看的变量值,当运行到该变量是左边的黄色箭头过了该变量后用鼠标放在该变量上面 就会显示该变量的值
满城县18528132841: 如何注入代码到exe中使用OD进行操作 - ?
校鹏康得: 前期准备: 首先,我们需要一个调试器,这里我比较喜欢OLLYDBG ---我认为他是这个世界上最好的调试器 :P) 第二,我们需要一个拿来注入我们代码的应用程序,我选择的是windows的记事本(notepad.exe),把notepad.exe拷贝到一个新...