PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

[Access violation ] 2G内地址错误访问

原创
2016-06-07 15:49:20 1012浏览

如无特殊说明 环境都是x86系列cpu ia-32 如果是64位会特殊说明的 例子都是引用swd 更详细的说明请看swd一书 以下说明及以后的博客都会有理解偏差的地方 还请各位前辈和战友指正一二 毕竟本人也是一边看书一边记录 难免会有天圆地方的思想 qq 604015858 欢迎

如无特殊说明 环境都是x86系列cpu ia-32 如果是64位会特殊说明的
例子都是引用swd 更详细的说明请看swd一书
以下说明及以后的博客都会有理解偏差的地方 还请各位前辈和战友指正一二 毕竟本人也是一边看书一边记录 难免会有天圆地方的思想
qq 604015858 欢迎随时指导交流

对windows来说 一个任务就是一个线程
cpu对任务的保护分为 任务间保护和任务内保护
任务间保护通过段机制和页机制来实现
任务内保护通过权限来实现

以下话题描述一下任务内保护
每个app(应用程序)都会有4G的空间 高2G放系统的数据和代码的映射
低2G app自用 当你访问高2G空间的系统空间 而又没有赋予访问特权 那就会出现如下出错:

Access violation - code c0000005 (first chance)
00401035 c705808080a022000000 mov dword ptr ds:[0A0808080h],22h ds:0023:a0808080=????????

将22h放到a0808080时出错 信息就是 访问系统空间时没有被授权 肯定会被拒绝

ps:以下是我配置windbg的信息
(由于我接触windbg时很茫然 下面贴上我的设置 希望可以给刚接触的朋友一个提示 不至于向我当初那样茫然 这些设置可能不正规 但至少效果出来了)
1:获取windbg
去微软官网下载windows调试工具集 或是在网上下载一个
安装之后你会在Debugging Tools for Windows目录下发现很多小工具 windbg.exe就是其中之一 这是一个弹药库 windbg只是其中的一支*

2:符号表的设置
系统符号设置: 可以参看http://blog.chinaunix.net/uid-24709751-id-4217635.html这个博客
不要以为这就完了 还需要设置你需要调试对象的pdb:
app符号设置:

你只需要设置前面的“D:\zwkkkkkkkkkkkkkkkkkkkkkk\百度云管家\科锐10DVD\DVD6 MFC编程\swd\bin\Debug”后面的是系统符号设置 如果你做了 就不需要在这添加了 windbg会自动添加在这儿

如果你的pdb目录不止一个 就需要把多个路径都写在这儿

还有一个问题 就是这个对话框怎么出现的?
windbg菜单栏 file下面的符号设置
windbg对很多路径都做了兼容处理 具体可以看一下windbg的帮助 网上有人把windbg的帮助翻译成中文了 不愿意看英文的可以找下中文了解一下

2: 应用程序路径
如果你调试的是dump文件 这个需要设置一下

3: 源文件路径
如果你有源文件 可以把源文件路径设置一下 第一张图的左上角那个窗口显示的就是源文件
大部分情况下 能获得到pdb就很不错了 但是为了方便学习 我还是加上了源文件 用以了解windbg报的每一个错误提示信息

至于windbg的用法 可以慢慢学习 用到几个命令学习几个 这也是本系列的一个重要目标之一

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。