找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2536|回复: 1

程序调试二三事

[复制链接]

307

主题

228

回帖

7349

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5599 个
贡献
253 次
宅之契约
0 份
在线时间
949 小时
注册时间
2014-1-25
发表于 2014-7-1 15:06:12 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
如何等待调试器?
android手机就有这种功能,那么c/c++该如何操作呢?


  1. #include <windows.h>
  2. #include <stdio.h>
  3. #define _WIN32_WINNT 0x0400
  4. void main()
  5. {
  6. printf("等待调试器\n");
  7. while(!IsDebuggerPresent())
  8. {
  9.   Sleep(1000);
  10. }
  11. printf("调试器已连接\n");
  12. //下面是要执行的代码。。。
  13. getchar();
  14. }
复制代码


编译成exe,运行,会出现等待调试器的字样,当你随便用某种应用层调试器windbg olldbg,就会显示已连接,
一般来说通过windbg这样的源码级调试很容易解决这个问题,不过如果你用的是非源码级调试器,那么可以这样尝试,
吧要调试的模块加入如上所示代码,就很容易断下来。

如何在加载模块的时候断下程序?
windbg下sxe ld *.dll   

如何使用Windbg调试时在程序入口处(用户入口)断下?
先用x指令查找main中的调试符号,如果发现winmain dllmain类似的记号即可
例如win自带记事本          bp notepad!WinMain
回复

使用道具 举报

1112

主题

1653

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24265 个
贡献
46222 次
宅之契约
0 份
在线时间
2299 小时
注册时间
2014-1-26
发表于 2014-7-1 19:03:18 | 显示全部楼层
事实上很多国产程序的保护程序都是用IsDebuggerPresent来检测调试器,一旦发现调试器就开启反调试模式(比如干掉调试器或者干掉自己。)于是就产生了各种保护与过保护的战争,反调试与反反调试的斗争。
当然TP现在是直接走驱动层干掉调试器了。玩腾讯游戏的时候TP会一直驻留,导致你在VS里按下F5就死。检测调试器有不止一种办法。我听说有一种版本的OD不会让IsDebuggerPresent返回TRUE,于是各种游戏保护就引入了别的机制来反调试……
总之现在游戏外挂的路难走了。不赚钱了。
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-5-4 03:40 , Processed in 0.037320 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表