欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-05-25 12:07:58
...

如无特殊说明 环境都是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 ] 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符号设置:
[Access violation ] 2G内地址错误访问
你只需要设置前面的“D:\zwkkkkkkkkkkkkkkkkkkkkkk\百度云管家\科锐10DVD\DVD6 MFC编程\swd\bin\Debug”后面的是系统符号设置 如果你做了 就不需要在这添加了 windbg会自动添加在这儿

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

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

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

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

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