acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突
来源:互联网 发布:php短网址生成源码 编辑:程序博客网 时间:2024/05/20 21:19
1.
修改了一个以前的arx程序,编译通过后,加载时出错,acad说它不是合法arx文件。但是因为还没走到DllMain(),所以vc也调试不了,不知道那里出错,毫无头绪。睡了一觉,觉得应该是全局变量或者类的静态成员初始化时出错。
到网上搜了一下,有篇文章还行:http://blog.csdn.net/xingzihe/article/details/9032789,为阅读方便,部分内容转帖如下:
Windows 进程一般放在 0x00400000 的地址,0x00400000 是所有版本的 Windows 能使用的最低地址,进程实例句柄的值总是和它的基地址相同,所有未被初始化的自动变量都会设上 0xCCCCCCCC。数值类似0xC0000005等,通常是debug模式下的未附值的指针(未初始化)。
稍微笔记一下上文:
0x00400000=4M=4x1024x1024=4x1048576=4194304, 1K=1024=0x400, 1M=1024x1024=0x100000
0xCCCCCCCC=0b11001100110011001100110011001100=3435973836
0xC0000005 =0b11000000000000000000000000000101=3221225477
和我的感觉一样,应该是指针越界访问或指针未初始化就使用这样的问题。最后果然是全局变量初始化顺序的问题,一个全局变量的初始化依赖了另一个全局变量的初始化,而c/c++中,不同编译单元的全局量的初始化顺序是没有保证的。稍作修改,果然重新运行起来了!
另外,初始化全局变量处也是可以下断点的。
折腾了好久,发现没有调试器的帮助,自己的脑子都僵住了,几乎不会解决问题了,哈
2.
新建了一个空的arx工程,编译加载都正常,属性 | 链接器 | 输入 | 附加依赖项 中加入了以前的一个arx的lib(并没有用到其中导出的变量或函数),编译通过但是加载不了了。
说是:???.arx 与此版本的 AutoCAD 不兼容。AcRxDynamicLinker加载"???.arx"失败。
研究了2天,是依赖的某个dll没找到?是某个调用的arx不兼容,是需要对某个arx使用linker delayload?等等。偶然发现,以前一个工程也是依赖了这个arx,一看,那儿是用了#pragma comment(lib, "???.lib"), 不是在工程的属性中设置在附加依赖项中。改用#pragma comment(lib, ...)果然成功加载。这两种引入库的方式有什么区别?不知道。
也有可能用附加依赖项的方式不行,是因为引入的这个.arx库不是用最兼容的vs版本编译的(vc2010, acad2012),没试验验证过是否如此。
3.
向一个arx工程中加入了一个类,编译通过,加载时说:
???.arx 无法找到所需的动态链接库或其他文件。
英文是:???.arx cannot find a dll or other file that it needs.
费了半天劲,确认所有用到的库中,除了windows和vc, win sdk自带的,都放在该???.arx同一个目录中了,应该不存在缺少dll或路径找不到的问题。有目的、无目的的修改、编译,加载,这种盲目的尝试了1天多。后来没什么招了,忽地想起网上看到有一个帖子说,用windbg能看到更多的信息,也不太抱希望,因为感觉又不是无源代码调试,vc的调试器,不会比windbg少什么信息。但是既然是盲目地试,也不在乎在试一下。用windbg环境下附加到acad.exe,加载???.arx居然成功了。这下知道基本上是因为acad.exe没找到???.arx所在目录下的另一个所依赖的arx。在acad的支持路径下加入该???.arx所在目录,果然加载成功。
奇怪的是,所有的dll和arx(除了windows和vc,win sdk自带的库)都放在一个目录下,而且之前加载其它dll时(都在与???.arx同一个目录下,没有子目录)也没有指定acad的支持文件路径,都加载成功了。这些都只有详细地了解了acad加载库的过程和搜寻库的规则才能彻底明白。
实验了一下,带/b “xxx.scr”参数启动acad.exe会不认arx所在的目录。把该目录加到acad的支持路径或者os的环境变量path,或者当作快捷方式的起始位置都可以。
不带/b参数,空参数启动acad.exe,手动arx加载各arx也能成功。
- acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突
- Demo.exe 中的 0x10001fdd 处最可能的异常: 0xC0000005: 读取位置 0x0000001c 时发生访问冲突
- xxx.exe 中的 0x005d93af (sss.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 关于 xxxx.exe 中的 0xxxxxxxx 处最可能的异常: 0xC0000005: 读取位置 0xxxxxxxx 时发生访问冲突
- 关于 xxxx.exe 中的 0xxxxxxxx 处最可能的异常: 0xC0000005: 读取位置 0xxxxxxxx 时发生访问冲突
- 解决xx.exe中的 0x004fd913 处未处理的异常: 0xC0000005: 读取位置 0xfeeefef2 时发生访问冲突
- 0x669586df (QtCored4.dll) 处最可能的异常: 0xC0000005: 写入位置 0xabababab 时发生访问冲突
- “XXX.exe 中的 0xXXXXXXXX处未处理的异常: 0xC0000005: 读取位置 0xXXXXXXXX 时发生访问冲突”的一种解决方案
- 10_2_4.exe 中的 0x00b0d00a 处有未经处理的异常: 0xC0000005: 读取位置 0xccccccc0 时发生访问冲突
- XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
- 求助帖~.exe 中的 0x10022897 (libcocos2d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突
- 【语言-C++】Image - .exe 中的 0x0043a998 处有未经处理的异常: 0xC0000005: 读取位置 0x029d846c 时发生访问冲突
- ...... 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- XXX中的 0x77da15de 处未处理的异常: 0xC0000005: 读取位置 0x00000001 时发生访问冲突
- 中的 0x00833257 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突
- 问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突
- 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 20170704
- hashtable 与字典表Dictionary
- Android 多种方式正确的加载图像,有效避免oom
- 设计模式之享元模式的学习思考
- Android学习笔记——文件路径
- acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突
- lua基础知识点1
- centos6.5下如何搭建一个ftp服务器和使用客户端
- 安卓OOM和Bitmap图片二级缓存机制(一)
- 安卓OOM和Bitmap图片二级缓存机制(二)
- [LeetCode 解题报告]014. Longest Common Prefix
- FFmpeg的Android平台移植—编译篇
- java版 经纬度和屏幕坐标互相转换
- HTML学习-frameset和iframe