博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用QQ传dll文件,你可能会遇到灵异事件
阅读量:7058 次
发布时间:2019-06-28

本文共 1390 字,大约阅读时间需要 4 分钟。

今天一个奇怪的问题,折磨了我跟朋友几个小时。经过九九八十一难之后,终于发现,原来这是灵异事件--传个文件都不省心!

我跟朋友的操作系统都是win7 x64,安装的都是VS 2012 RC和VC++ 2010 express,以及opencv 2.4.2。朋友用vc++写了一个OpenCV的hello world,采用的是其x64的dll,也编译为x64代码,但是死活运行不起来。一运行就报错:

 

 

据说,该错误代码0xc000007b表示:STATUS_INVALID_IMAGE_FORMAT. 按我的经验来说,这是因为64位的程序调用了32位的库。

我让朋友把生成的exe文件发过来,在我这边运行却完全正常。

MSVCP100D.DLL和MSCVR100D.DLL

为了搞清楚该程序到底依赖了哪些DLL,请出神器。朋友发过来了截图:

原来少了这个文件!

下面的灵异故事就围绕着这个MSCVR100D.DLL和它的兄弟MSCVP100P.DLL展开。

Everything出场

我打开Everything,输入MSVCP100D.DLL,结果如下:

可以看到,在System32和SysWOW64下,各有一个。它们大小相同,修改时间也一样,所以我以为它们是一样的。

然后实际上呢?看这里:

System32下的大小,实际上是991K!而且修改日期也不是12:15。

此为灵异事件1。如果仅仅如此,不算是灵异事件,而应该算是Everything的BUG了。

QQ出场

我把System32下的msvcp100d.dll拉到QQ上,向朋友发送过去。奇怪的是,我明明拉的是991K的这个,但它显示的都是726K的这个!

由于我从来没想到QQ竟然会在中间狸猫换太子,还以为发送的就是991K的那个呢。

然而朋友拷过去后,运行程序还是出错。我们只好把目光再次集中在程序代码、环境变量设置等问题上,可想而知白忙一场。

后来朋友又使用了DependencyWalker,发现它显示的MSVCP100D.DLL两个文件,却是x86的:

而我的,都是x64:

不可能啊!难道传错了?!我又传了一遍,结果还是一模一样。

这次注意到他的MSVCP100D.DLL的大小是743248,也就是700多K,而我的是900多K。

再次使用QQ,这次终于发现QQ在中间做了手脚,传了一个不一样的文件。

难道QQ对这个文件特别照顾?那我把它把个包再传,于是打成了一个zip包:

结果QQ发送失败!

再试!我把mscvp100d.dll和zip都拷到D盘下,再用QQ发送,这次却全都成功了。朋友的问题也解决了。

百慕大System32

难道"System32"文件夹是百慕大?不论是Everything还是QQ,都无法正确处理里面的文件,没有任何的错误提示,直接用sysWOW64下的同名文件代替了。

如果不是我俩本着不搞定不睡觉的决心,不会发现我们几个小时的时间都浪费在这样一个神奇的问题上了。

我个人猜想,这可能是win7对System32这个重要的文件夹有特殊的保护,不过到底是什么原因,还得等高人来揭密了。

把这件事记录下来,希望朋友们遇到类似问题时,可以参考一下。

真相

转载于:https://www.cnblogs.com/9keyes/archive/2012/08/07/2627489.html

你可能感兴趣的文章
iOS swift 语句只能写在函数体内
查看>>
C# 接收form表单中多个相同name值的问题
查看>>
Eclipse下配置使用Hadoop插件
查看>>
5/3上午
查看>>
回顾“.NET技术”.NET Remoting分布式开发
查看>>
移动开发多平台代码共享“.NET研究”
查看>>
Convert IPv6 Address to IP numbers (C#)
查看>>
总是弹出visual studio 实时调试器 三种解决办法
查看>>
12岁男孩发现Firefox严重安全漏洞获奖3000美元
查看>>
谷歌发安全警告:社交网络威胁用户隐私
查看>>
一起谈.NET技术,System.DateTime详解
查看>>
一起谈.NET技术,VS2010技巧:如何在js文件中使用jQuery智能感知
查看>>
一道有趣的JS问题
查看>>
安卓开发中的一些经验总结
查看>>
HTML5规范的本地存储
查看>>
【C/C++】一些基本问题
查看>>
Robot Framework自动化测试 ---视频与教程免费分享
查看>>
php -- 数组排序
查看>>
node实现缓存
查看>>
Ubuntu里的内核交叉编译和共享文件夹编译的区别
查看>>