通过简单Dump能获得的基本信息


如果有出错程序的dump, 哪怕dump不是在合适的时机获取的, 也可以分析出有用的信息.

  • 通过vertarget查看系统版本和系统运行了多长时间.
  • 通过!peb查看环境变量的情况. 由于很多第三方软件都习惯把自身路径添加到环境变量中, 所以这里很多时候可以看出一些已经安装的软件.
  • 同时还能看到当前进程所加载的DLL和对应路径.

检查DLL和对应路径时, 可以重点检查如下的一些项目:

  1. 有没有防毒程序的DLL加载.
  2. 有没有类似MSVCRTD或MFC42D的debug版本DLL加载. 如果有, 请说明程序使用的某些组件是否是在Debug模式下编译的.
  3. 通过MFC42这样的DLL大致判断程序时如何开发的. 比如是否使用MFC或ATL. 如果加载了mscoree, 询问一下程序是否使用了托管代码.
  4. 通过lmvm命令检查值得怀疑的DLL的详细版本和公司名称. 必要情况下还可以使用sos!savemodule命令把DLL保存到本地以检查链接情况, 等等.
  5. 通过lmf命令还可以检查是否有unload的module. 很多问题是由正在使用的module被unload导致的, 也有很多问题最后导致某些module被unload. 看看这里的unload module是不是正常情况.
  6. 检查module的数量, 是否有动态生成的module加载. 如果进程中加载的module过多, 则容易导致内存地址碎片. 比如对于asp.net程序, 很多module是对应于aspx页面动态编译生成的, 需要通过设置debug=false来激活batch compilation, 以减少动态module的产生.
  7. 通过dump文件的尺寸来判断内存使用情况. 一般dump的大小与实际内存使用的大小一致.
  8. 检查某些系统dll来判断某些系统组件是否已经升级到最新. 比如检查mscorwks的版本就可以判断.NET Framework的版本以及是否打过SP1, 检查msado15就可以判断MDAC的版本.

摘自<Windows用户态程序高效排错>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的大学人员管理程序的实现: ```python import pickle class Person: sum = 0 def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex Person.sum += 1 def print(self): print("姓名:", self.name) print("年龄:", self.age) print("性别:", self.sex) def save(self): with open(self.name + ".dat", "wb") as f: pickle.dump(self, f) class Student(Person): def __init__(self, name, age, sex, speciality): super().__init__(name, age, sex) self.speciality = speciality def print(self): super().print() print("专业:", self.speciality) class Teacher(Person): def __init__(self, name, age, sex, department): super().__init__(name, age, sex) self.department = department def print(self): super().print() print("院系:", self.department) class Staff(Person): def __init__(self, name, age, sex, department, position): super().__init__(name, age, sex) self.department = department self.position = position def print(self): super().print() print("部门:", self.department) print("职务:", self.position) if __name__ == "__main__": p1 = Student("张三", 20, "男", "计算机科学与技术") p1.print() p1.save() p2 = Teacher("李四", 30, "女", "计算机科学与工程") p2.print() p2.save() p3 = Staff("王五", 40, "男", "行政部", "主任") p3.print() p3.save() ``` 运行结果如下: ``` 姓名: 张三 年龄: 20 性别: 男 专业: 计算机科学与技术 姓名: 李四 年龄: 30 性别: 女 院系: 计算机科学与工程 姓名: 王五 年龄: 40 性别: 男 部门: 行政部 职务: 主任 ``` 同时,三个对象的信息也被保存在了文件中。可以使用pickle模块来反序列化得到原始对象。 ```python with open("张三.dat", "rb") as f: p1 = pickle.load(f) p1.print() with open("李四.dat", "rb") as f: p2 = pickle.load(f) p2.print() with open("王五.dat", "rb") as f: p3 = pickle.load(f) p3.print() ``` 输出结果与原始对象相同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值