无法定位程序输入点于msvcrt.dll相关问题解决方法_第1页
无法定位程序输入点于msvcrt.dll相关问题解决方法_第2页
无法定位程序输入点于msvcrt.dll相关问题解决方法_第3页
无法定位程序输入点于msvcrt.dll相关问题解决方法_第4页
无法定位程序输入点于msvcrt.dll相关问题解决方法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

无法定位程序输入点于 msvcrt dll 相关问题解决方法 图 安全中国 更新时间 2009 10 21 00 32 44责任编辑 池天 热热 点 点 我发现这个问题是在每次打开八戒桌面小工具时会提示 Deskwidget DeskWidget exe 无法找到入口 无法定位程序输入点 except handler4 common 于动态链接库 msvcrt dll 上 遂上网查了资料 发现这是个系统性的问题 以前八戒软件能正 常使用 不知道这段时间是卸载了什么软件还是装了什么东西 导致八戒不能用了 网上的方法如下 可以解决每次弹出 无法定位 对话框的问题 这是由于 sp3 加载的驱动造成的 只需要将 C WINDOWS system32 dwmapi dll 重新命名一下即可以解决 在 system32 中找 到 dwmapi dll 他的标签居然表明来自 Vista RTM 试着把 dwmapi dll 重命名一下 注 改成任意文件名 如 dwmap dll 问题解决 不过 我从没有修改飞信安装文件夹下的 dwmapi dll 却能正常使用飞信 没有出现网上所说的每次弹出 无法定位 对话框 的问题 真的很奇怪 究竟是什么原因导致这个问题的呢 为什么 windows system32 下的 dwmapi dll 动态链接库可以随便 修改 这不会导致系统问题吗 也许下面的文章能解答一些疑问 原文地址 浅谈 Windows 环境软件故障调试与分析 大家好 我是 Eric 今天 我将与大家一起分享一个软件故障的调试与分析案例 希望给大家提供一个解决 Windows 下软件 错误的基本分析思路和供参考的一类解决方法 看完本例 您将会初步了解到 Dll Entry Point 错误的一些基本知识 也将 接触到像 Winbdg Dependency Walker 一类的专业调试 分析工具软件的基本使用 在这里我也和大家一起分享并探讨 本例中出现错误的软件是中国移动飞信 2008 版客户端 具体现象是每次双击图标启动该程序时总会收到一个错误信息对话框 标题为 FetionFX exe Entry Point Not Found 内容为 The procedure entry point except handler4 common could not be located in the dynamic link library msvcrt dll 如下图所示 以前在台式机中文版 Microsoft Windows XP Professional with Service Pace 2 上使用这个客户端时并没有出现该问题 但是今年 9 月份我将笔记本计算机的操作系统安装为 Microsoft Windows XP Professional with Service Pace 3 的英文版 然后于 10 月初安装飞信客户端之后就一直存有这个问题 直到今天我才有一块集中的空余时间来分析解决 之前我搜索过百 度 但是答案均是 系统缺少 msvcrt dll 下载一个就好了 或者是 msvcrt dll 版本不正确 下载一个替换即可 为了 图简便 我也试过 但是根本不奏效 可是我发现没有解决也可以正常使用飞信 只是每次要弹出这个错误消息 所以也没 急着管 哈哈 幸好今天解决掉了 心得是解决软件故障不能浮于表面 欲发掘内在问题和根本原因 还得自己架设环境手动 分析 因为软件太多了 错误的种类也太多了 一切还是得具体情况具体分析阿 下面我们一起来看看整个过程吧 全部 的分析调试过程不止下面的这些 但是经过解决这个问题 以下整理出来的思路应该是最简短并且能够找到问题原因的 首先 我们让该问题重现 即双击飞信客户端的桌面图标 让其弹出该错误对话框 错误提示出现了 我们先不急着点击 OK 确定 按钮 而是启动一个调试程序 本例中使用著名的 Microsoft Windbg 工具进行调试分析 然后在 File 文 件 菜单中选择 Attach to a Process 附加到一个进程 选择当前的飞信客户端的进程 FetionFX exe 这里之 所以要选择 Attach to a Process 就是因为我们要将调试器跟踪到当前这个产生错误的进程 然后从内存中实时察看相关的 线程堆栈甚至 API 函数的调用 Windbg 中还支持其他的几种类型的调试 须根据具体情形按需选择 附加到该进程之后的结 果如下图所示 然后 我们可以在图中清晰地看到 当系统加载到 c Program Files China Mobile Fetion dwmapi dll 时挂起 就是图 中的 Warning Break in time out suspending 在 Windows 中的表现也就是弹出了上述的错误对话框 并且我们还没有 点击 确定 按钮 于是程序暂时挂起 因此 我们可以判断 FeionFX exe 启动时加载的位于 c Program Files China Mobile Fetion 目录下的 dwmapi dll 在执行某个函数过程的时候遇到了错误 那么究竟是什么样的函数呢 根据错误对话 框的信息 我们可以初步猜测是 MSVCRT dll 中的 except handler4 common 于是 我们需要查找一下当前进程中有关该过 程的现状 所以执行 x msvcrt except handler 命令 返回的结果也在上图中的底部 在 Windbg 中 x 是查找符号的命令 可以用来查找全局变量的地址或过程的地址 比如 x kernel32 显示 Kernel32 dll 中的所有可见变量 数据结构和过程 号是通配符 代替任意的字符串 为了查找全部的 我们需要使用该通配符 其实如果你执行 x msvcrt except handler4 common 你会发现没有任何结果 也就是找不到 其实这也就是出现该错误的原因 我们后文分 析 因此退一步不输入 4 common 查找所有 except handler 过程 结果告诉我们 进程中 msvcrt dll 存有的过程有 except handler2 以及 except handler3 而恰恰没有 except handler4 鉴于以上返回结果 我们可以初步断定 错误的起因是因为程序不能执行 MSVCRT DLL 中的 except handler4 common 过程 而且原因是当前缺少这个 此时 我们需要借助 Microsoft Dependency Walker 进行辅助分析并且确认 我们启动 Microsoft Dependency Walker 打开该 dwmapi dll 可以发现 该 DLL 文件的运行将会首先调用 MSVCRT DLL 而 且下图中也标示出来了 在当前调用的 MSVCRT DLL 中 缺少一个函数 except handler4 common 这起好与我们看到的错 误现象相以及 Windbg 分析的结果吻合 如下图所示 此时 我们可以进一步断定 要么是 DLL 版本不对 要么就是 dwmapi dll 有问题 而这个程序调用的是 XP 系统的 systemroot system32 下面的 MSVCRT DLL 从移动飞信官方得知 该程序就是针对 XP Vista 开发的 且朋友中文版 XP SP3 中运行得很正常 于是我确认了一下本机该文件的版本 结果是 7 0 2600 5512 xpsp 2111 看来没有什么问题 是 版本 7 0 2600 于是我们得查一查另外一个文件了 dwmapi dll 为什么它要载入 MSVCRT Dll 并且调用其中并不存在的一 个过程呢 接下来 我们查看位于飞信文件夹下的 dwmapi dll 察看版本信息 得到 6 0 6000 16386 vista rtm 2205 问题就 在这里 看到了吗 这个位于飞信安装目录下的文件怎么会来自 Vista 正式发布版 怎么会用到 XP 的程序执行之中 要知道 这个文件之所以能够使用全部功能是因为在 Vista 环境之下 很多新的 DLL 文件中带有新的函数 正好可以被它调 用 那么我们猜想 是不是 Vista 版本下的 MSVCRT DLL 就存在一个新版本 即第 4 版的 exception handler4 呢 我们从 Microsoft Windows Vista RTM 中提取出位于 systemroot system32 下面的 MSVCRT DLL 其版本为 7 0 6001 18000 longhorn rtm 1840 然后再次使用 Dependency Walker 打开 发现其中果然存在该新的函数 即 except handler4 common 如下图所示 到这里 问题就已经清楚了 正是由于本机的飞信客户端在启动时调用了用于 Vista 的 DLL 组件 dwmapi dll 而该 DLL 又要 尝试调用一个 Vista 下 msvcrt dll 才有的过程 才出现了该错误提示 因为我们发现 该错误提示并不影响之后程序的正常 使用 而且我们所使用的环境是 Windows XP 而非 Vista 所以推断该调用 dwmapi dll 的过程是非必要的 于是将其重命名或 是删除到回收站 再次启动飞信客户端 错误提示消失了 迎来的是程序正常的使用 之后我查阅了大量的 KB 资料以及 Visual Studio 的 MSDN 资料 发现 except handler 是 VC 编译器自带的一个内部异常处 理 而版本 4 的 except handler4 common handler 又仅存在于 Vista 以及之后的系统之中 而且值得注意的是 很多这样子 的错误都是由于系统中存在有来自更高级版本系统的文件造成的 而文件的来源于一般有几种 一般是修改系统时自己放进 去的或者别的安装程序带入的 也有情况是盗版改版的操作系统中存有的 再有就是本例中的情形 安装程序可同时用于 Windows XP 以及 Windows Vista 可能是由于 XP 英文版与中文版的环境的不同 飞信客户端的启动选择了加载调用为 Vista 准备的 dwmapi dll 从而产生了此错误 注 本例中并没有介绍使用 Dependency Walker

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论