远程线程要运行 肯定第一步就是要把代码写到远程进程的地址空间(WriteProcessMemory) 在VirtualAllocEx后 返回一个指针,注意这个指针 就是目标进程中的地址 因此我们可以写一个小的Demo程序 然后让我们的程序注入线程代码(或者直接利用WinDbg强制插入(适合于调试没有代码的目标程序)) 然后直接在VS中(或者WinDbg中)强制中断程序 打开内存窗口 输入刚刚分配的那个指针的地址 这样就可以看到copy过来的代码数据了
现在的问题是 如何给这段程序下断点调试呢? 方法如下VS里面使用快捷键Alt + 8 调出反汇编窗口 如图
最上面有一栏地址栏 如图
下断点就容易啦 直接在push ebp那个地方下个断点(测试而已) 这样 远程线程运行到这里的时候就会断下来
看不懂汇编代码没关系 现在来教你怎么看汇编代码
返回我们的主程序 在调试窗口中打开 输入远程线程函数的名称 如图
OK 现在在主程序里面 按Alt + 8 重复上面的方法 把地址打进去 回车 发现什么 反汇编了我们的远程函数 代码是不是和那边一样 还带注释呢 如图
OK 就算现在你一点汇编也不懂 你也能牛逼哄哄的调试汇编代码了 谁叫咱用的IDE这么强大呢
OK 基本上要说的都说完了 调试出真知 很多系统方面的知识可以在调试的时候获取 比如 防止栈攻击的cookie RunTimeCheck的栈检测 等等 细节方面的东西就不多说了 只要动手调试一下 你会学会很多很多东西的 Good Luck~
eclipse中web程序调试方法是放在tomcat等容器中进行的。
安装及调试步骤如下:
1、首先下载安装Tomcat。
2、然后打开Eclipse,在Eclipse中添加Tomcat Server。
步骤如下:
a
打开Window->Preferences->Server->Runtime
Environments->Add->选择Apache Tomcat
v60->next->选择Tomcat的安装目录->finish。
b当Tomcat被添加到Eclipse的
Server以后,Eclipse会自动创建一个名称为“Servers”的项目,其中包含了contextxml、serverxml、
tomcat-usersxml、webxml等基本配置文件。下面开始配置web项目调试选项:
c在web项目上右键->Debug As->Debug Configurations->在Apache Tomcat上右键->New,创建调试器,然后使用缺省配置选项即可。
d接下来就可以在项目上右键->Debug On Server开始调试web项目了。
下面是已经修改后的代码,代码简化,并去掉了错误处理。
Private Sub Command1_Click()
Dim jj, XX, l As String, z, I As Integer, j As Integer
Dim Fs() As String
l = File1Path
z = File1ListCount - 1
ReDim Fs(z)
For I = 0 To z
Fs(I) = File1List(I)'文件列表存入数组,防止改名后出现问题
Next
For I = 0 To z
jj = Fs(I)
XX = (I + 1) & Right(jj, 4)
Label1 = Str(I + 1) + "--" + jj + "--" + XX '追踪显示
If XX <> jj And jj <> "" Then
If Dir(l + "\" + XX) <> "" Then
If MsgBox("目标文件" & XX & "已存在,是否覆盖?", vbYesNo, "提示") = vbYes Then
Kill l + "\" + XX
Name l + "\" + jj As l + "\" + XX '文件改名
For j = 0 To z
If Fs(j) = XX Then '改名后的文件不允许后面再改
Fs(j) = ""
Exit For
End If
Next
End If
Else
Name l + "\" + jj As l + "\" + XX '文件改名
End If
End If
DoEvents '防止程序没有反应现象发生
Next
File1Refresh
End Sub
首先,你可以再次使用前文中提到过的一种方法,即利用print语句监视程序的运行情况。这里要对这种方法稍加改动:每当TSR程序被系统调用时,无论系统采用什么方式(击键,时钟中断,等等),你都可以用append模式打开一个记录文件,并将能告知程序员程序运行情况的有关信息打印到这个文件中。这些信息可以包括执行过程中遇到的函数,变量的值以及其它信息。在TSR程序执行完毕(或崩溃)后,你可以分析这个记录文件,并从中获得一些有价值的信息。
另一种方法是创建一个"假的"TSR程序。换句话说,创建一个与TSR程序功能相似的程序,但并不是一个真正的TSR程序!相反,还要使这个程序成为一个测试程序的子程序。你可以很容易地把原来接受系统中断的功能改为从主程序中接受函数调用。你可以把输送给TSR程序的输入信息“封装”在主程序中,也可以让主程序动态地从程序员那里接受这些输入信息。
这个功能和TSR程序相似的程序永远不会把自身装到计算机内存中,也不会改变 *** 作系统的向量地址。
第二种方法有几点明显的好处:它使程序员能够使用自己惯用的调试技术,调试方法和调试程序,它也为程序员提供了一种更好的观察程序内部 *** 作的方法。此外,真正的TSR程序会驻留在内存中,如果不将它们移去,它们会一直占用一部分计算机内存。如果你的程序还未经调试,那么它完全有可能不能正确地把自身从计算机内存中移去,而这很可能会导致耗尽计算机的内存(这一点很象内存漏洞)。
解决应用程序错误的方法步骤:
1首先排除病毒原因,使用杀毒软件,比如最新版本的360杀毒快速查杀3-5分钟,根据检查结果,点击立即处理。
2如果应用程序出错的提示是缺少某个文件,那就可能是这个文件损坏,根据这个组件查询是哪个系统组件损坏,重新安装相关组件,恢复程序文件,一般即可解决。
3若是相关软件自身的组件缺失,只需要重新安装这个软件即可。比如运行迅雷时提示缺少某个文件,可以尝试重新安装迅雷。
4若以上方法无效,可能是软件之间的冲突导致出错。解决办法是尝试关闭几个无关的正在运行的应用程序,看看错误是否还会重现。若已解决,就知道是哪两个软件冲突,不再同时运行这两个软件即可解决。或者向厂商反馈故障,督促厂商升级解决。如果不清楚是哪几个软件冲突,可行的解决办法是使用360安全卫士的系统优化,在一键优化里,关闭一些不常用的软件启动。这样开机后运行的程序少一些,冲突的概率会下降。
5对于另一种应用程序出错,截图显示“应用程序出错,内存地址不能读或不能写”,这种情况最复杂,若以上方法不能解决,则很可能是硬件(主要是内存)故障,可能是兼容性不良,只能联系硬件供应商修理。或者重装系统,重装后短时间内可能会有效。
C语言编写的程序要进行调试,主要看使用的调试器,比如Windows上可以使用vc/vs中自带的调试器,也可以使用windbg(微软自家专业的调试器)、也可以使用OllyDbg(ring3级最常用的动态调试器),不同的调试器具体的用法肯定是不一样的,但是原理及核心 *** 作类似。以vc60为例
1、在VC60中按F11即可进入调试,进入调试后可以查看反汇编代码,直接右键选择”Go To Disassembly“即进入反汇编。
2、常用的即F10键和F11键,F10即step over、F11即step into即步入,在动态调试器中,单步执行是基础。具体的可以参考“调试”菜单中的功能,如下图所示:
断点调试就是这样的,调置一个断点,F5开始调试,运行到断点处程序会暂停,这时有机会查看各变量的当前值,再按F5继续运行调试,若还有断点,则会跳到另一个断点,若已经没有断点了,则运行到程序结束。
在这个过程中,能找到程序出错几乎全靠自己分析,程序不会直接指定说哪里出错了(也不完全排除,有时还是会提示的),就这些
参考资料:
以上就是关于进程和线程怎么调试全部的内容,包括:进程和线程怎么调试、怎么调试Web程序、VB程序出错,如何调试等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)