
C语言编写的程序要进行调试,主要看使用的调试器,比如Windows上可以使用vc/vs中自带的调试器,也可以使用windbg(微软自家专业的调试器)、也可以使用OllyDbg(ring3级最常用的动态调试器),不同的调试器具体的用法肯定是不一样的,但是原理及核心 *** 作类似。以vc6.0为例
1、在VC6.0中按F11即可进入调试,进入调试后可以查看反汇编代码,直接右键选择”Go To Disassembly“即进入反汇编。
2、常用的即F10键和F11键,F10即step over、F11即step into即步入,在动态调试器中,单步执行是基础。具体的可以参考“调试”菜单中的功能,如下图所示:
远程线程要运行 肯定第一步就是要把代码写到远程进程的地址空间(WriteProcessMemory) 在VirtualAllocEx后 返回一个指针,注意这个指针 就是目标进程中的地址 因此我们可以写一个小的Demo程序 然后让我们的程序注入线程代码(或者直接利用WinDbg强制插入(适合于调试没有代码的目标程序)) 然后直接在VS中(或者WinDbg中)强制中断程序 打开内存窗口 输入刚刚分配的那个指针的地址 这样就可以看到copy过来的代码数据了现在的问题是 如何给这段程序下断点调试呢? 方法如下VS里面使用快捷键Alt + 8 调出反汇编窗口 如图
最上面有一栏地址栏 如图
下断点就容易啦 直接在push ebp那个地方下个断点(测试而已) 这样 远程线程运行到这里的时候就会断下来
看不懂汇编代码没关系 现在来教你怎么看汇编代码
返回我们的主程序 在调试窗口中打开 输入远程线程函数的名称 如图
OK 现在在主程序里面 按Alt + 8 重复上面的方法 把地址打进去 回车 发现什么? 反汇编了我们的远程函数 代码是不是和那边一样? 还带注释呢 如图
OK 就算现在你一点汇编也不懂 你也能牛逼哄哄的调试汇编代码了 谁叫咱用的IDE这么强大呢 ?
OK 基本上要说的都说完了 调试出真知 很多系统方面的知识可以在调试的时候获取 比如 防止栈攻击的cookie RunTimeCheck的栈检测 等等 细节方面的东西就不多说了 只要动手调试一下 你会学会很多很多东西的 Good Luck~
解决应用程序错误的方法步骤:1.首先排除病毒原因,使用杀毒软件,比如最新版本的360杀毒快速查杀3-5分钟,根据检查结果,点击立即处理。
2.如果应用程序出错的提示是缺少某个文件,那就可能是这个文件损坏,根据这个组件查询是哪个系统组件损坏,重新安装相关组件,恢复程序文件,一般即可解决。
3.若是相关软件自身的组件缺失,只需要重新安装这个软件即可。比如运行迅雷时提示缺少某个文件,可以尝试重新安装迅雷。
4.若以上方法无效,可能是软件之间的冲突导致出错。解决办法是尝试关闭几个无关的正在运行的应用程序,看看错误是否还会重现。若已解决,就知道是哪两个软件冲突,不再同时运行这两个软件即可解决。或者向厂商反馈故障,督促厂商升级解决。如果不清楚是哪几个软件冲突,可行的解决办法是使用360安全卫士的系统优化,在一键优化里,关闭一些不常用的软件启动。这样开机后运行的程序少一些,冲突的概率会下降。
5.对于另一种应用程序出错,截图显示“应用程序出错,**内存地址不能读或不能写”,这种情况最复杂,若以上方法不能解决,则很可能是硬件(主要是内存)故障,可能是兼容性不良,只能联系硬件供应商修理。或者重装系统,重装后短时间内可能会有效。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)