免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:11.第二阶段x64游戏实战-框架代码细节优化
本次写的内容是关于调试、排错相关的,在写代码的过程中肯定会遇到问题,不可能会一帆风顺
比如说注入我们写的dll之后游戏就会崩溃或者点击按钮之后会崩溃,这要怎么解决问题?怎么找出问题在哪,比如有人写了代码会让游戏崩溃,然后跑过来跟我说游戏崩溃,我根本不知道你说的是什么,正确的是找到问题,比如这行代码怎么怎么报错了怎么怎么不行,就要把问题的细节描述出来
首先是注入就崩溃,这是什么情况?
关于注入就崩溃这个问题,首先要搞清楚代码执行的流程,就是说我们的dll一注入进去会发生什么情况,从哪里开始执行,如下图红框MFCdll一注入进去会从以项目名字命名的.cpp文件开始
![]()
从InitInstance函数开始执行
![]()
所以一注入就崩溃可以写打印日志的代码,如下图红框的代码是用来打印日志
![]()
然后如下图红框就在InitInstance函数中调用LogA函数,打印日志,这样可以看到执行到哪一行,导致的崩溃,如果打印了1111没打印2222就说明73行代码报错了,这样就定位到错误的代码了,就是看它执行到那了该有的日志有没有打印出来
![]()
查看日志的方式是通过Dbgview这个软件,打开之后点击下图红框位置,包含写的*说明所有日志都打印,包含它还可以AAA*这样就只打印内容以AAA开头的数据,排除写的1;2;3说明只要日志的内容包含1或2或3就不显示
![]()
现在的日志代码正常执行它会打印1111、2222、3333、4444
![]()
注入打印的内容,为什么没打印4444?因为 PMainDialog->DoModal(); 这个代码是一个模态窗口,代码会在它这一行卡主后面不会执行,只有把窗口关闭了才会打印4444
![]()
关闭窗口打印4444,通过这些步骤的打印就可以清楚的知道代码执行的流程,也就能知道注入就崩溃是哪一行代码引起的
![]()
注入不崩溃点击按钮这种的崩溃怎么办?
也是跟上方注入崩溃一样,找到按钮点击之后执行的函数,把每一行都加上LogA,看看执行了哪一行代码导致了崩溃
如果不想用上面的方式可以使用 Visual Studio 2022 提供的附加,如下图点击附加到进程
然后如下图搜索进程名,找到想要附加的进程
鼠标左键单机进程,然后点附加
附加之后的样子
然后在入口位置设置断点,如下图红框
然后使用注入器注入我们的dll文件,然后就可以触发我们设置的断点了
它是可以直接看得到每个变量内存的数据的,可以很方便的看崩溃的原因 ,比较好用,但是有些有检测的软件没法使用,到时候还是要用LogA的方式