从堆里找回“丢失”的代码相关命令简介

简介: 从堆里找回“丢失”的代码相关命令简介

前言

在上一篇文章中,我们主要使用了三个命令 !addresss.writemem 把丢失的代码成功的保存到了文件中。本文简单介绍一下上文用到的这三个命令。

windbg 中的地址范围语法

很多命令都会用到 地址范围。比如 s 命令,.writemem 命令。

windbg 中可以通过两种形式指定地址范围。起始地址 L长度 或者 起始地址 终止地址。在上一篇文章中,我们使用的是 起始地址 终止地址 的形式。我们也可以使用用 起始地址 L长度 的形式来指定一个范围。其中的 L 必不可少,而且,L 后面跟的是要查看的单位数量,不是字节数。比如,我们查看起始地址 0xc0000 处对应的内容,同样是L4,按字节(db),按四字节(dd)和按八字节(dq)查看,显示的内存范围是不一样的

display-by-range

有两点需要注意:

  1. 如果搜寻的范围超过256MB,我们需要使用 L? ,而不是 L
  2. 我们可以使用 L- 表示给定的 address 是终止位置,而不是起始位置。

range-specifier

!address 命令

该命令可以用来查看指定地址对应的信息,也可以用来查找过滤。在之前的文章里使用 !address 查看过某个地址对应的信息。上一篇文章中我们主要使用的是这个命令的查找过滤功能(通过 -f 参数,ffilter 的缩写)。

  • 我们可以根据用途过滤,具体参考下表。
    filt-by-memory-usage

  • 还可以根据内存保护属性过滤,具体参考下表。
    filt-by-memory-protection

  • 还可以根据内存状态过滤,具体参考下表。
    filt-by-memory-state

  • 还可以根据内存类型过滤,具体参考下表。

filt-by-memory-type.png

-f 参数需要配合 -c:"command" 在查找的过程中执行对应的命令。

option-c

s 命令

该命令可以用来查找符合特定模式的内存。sSearch Memory 的缩写。

s [-[[Flags]Type]] Range Pattern 
s -[[Flags]]v Range Object 
s -[[Flags]]sa Range 
s -[[Flags]]su Range

这里仅截取 Type 的用法。更多用法请参考官方文档。
search-type

.writemem 命令

该命令比较简单,.writemem FileName Range

FileName :如果路径中有空格,需要使用 "" 引起来,这个应该是常识了。

Range :相关的语法已经在本文开始介绍了。

总结

我们在上一篇文章中用到的命令(!address -f:heap,PAGE_READWRITE -c:"s -u %1 %2 args.Contains(\"--all\")")的意思是:遍历可读写的堆内存,对每个内存区域调用 s 命令,搜寻匹配 args.Contains("--all")unicode 字符串。s 命令需要的地址范围是通过 !address 命令传递过来的 %1(起始地址) 和 %2(结束地址) 传递的。

参考资料

相关文章
|
3月前
|
存储 算法 Linux
数据恢复软件恢复的数据打不开的原因与解决方法
数据恢复软件恢复的数据打不开的原因与解决方法
692 10
|
7月前
|
存储 Windows
删除的视频怎样才能恢复?详尽指南
误删视频别慌,本文概览实用恢复技巧。首要行动:停用涉事存储以防数据覆盖。探索回收站,检索近期删除。备份是宝藏,搜寻云或外置硬盘。软件救星谨慎付费,试用验证。极端情况,专家服务可开盘恢复,代价高昂需权衡。
删除的视频怎样才能恢复?详尽指南
|
7月前
|
存储 数据挖掘 Linux
服务器数据恢复—服务器重装系统导致原分区丢失的数据恢复案例
服务器数据恢复环境&故障: 磁盘柜中有一组通过RAID卡创建的RAID5阵列,分配一个LUN,服务器上层安装Linux操作系统。操作系统层面划分sdc1和sdc2两个分区。通过LVM扩容的方式将sdc1分区加入到了root_lv中;sdc2分区格式化为XFS文件系统。 服务器重装操作系统后,磁盘分区改变,sdc2分区丢失,无法访问。
服务器数据恢复—服务器重装系统导致原分区丢失的数据恢复案例
|
8月前
|
存储 数据挖掘 索引
服务器数据恢复—服务器存储中文件夹丢失的数据恢复案例
服务器存储数据恢复环境: DroboPro FS网络存储,共8块SAS硬盘,组建了一组raid5磁盘阵列。 服务器存储故障: 存储中有一个共享文件夹丢失,该文件夹存放了重要数据。
服务器数据恢复—服务器存储中文件夹丢失的数据恢复案例
AXURE怎么找回丢失的文件
AXURE怎么找回丢失的文件
127 0
从堆里找回“丢失”的代码
从堆里找回“丢失”的代码
|
NoSQL Redis 开发者
持久化-数据恢复过程演示|学习笔记
快速学习持久化-数据恢复过程演示
|
存储 关系型数据库 MySQL
你的数据库真的清除干净了嘛?看完这篇文章你会若有所思!!
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合 有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功!
你的数据库真的清除干净了嘛?看完这篇文章你会若有所思!!
|
缓存 开发工具 git
Git命令集十三——快照操作
Git命令集十三——快照操作
283 0
|
存储 SQL Oracle
回到过去,找回遗失的珍宝 - TiDB 的历史读功能
数据作为业务的核心,关系着整个业务的生死,所以对于数据库来说,数据的安全性是放在首位的,从宏观角度来看,安全性不仅仅在于的数据库本身足够稳定不会主动的丢失数据,有的时候更是对业务本身甚至人为失误造成损失是否有足够且便捷的应对方案,例如在游戏行业中经常遇到的反作弊(作弊玩家回档)问题,对于金融业务的审计需求等等,如果在数据库层面上提供相关机制,会让业务开发的工作量和复杂度减少很多。 传统的方案会定期备份数据,几天一次,甚至一天一次,把数据全量备份。当意外发生的时候,可以用来还原。但是用备份数据还原,代价还是非常大的,所有备份时间点后的数据都会丢失,你绝对不希望走到这一步。另外全量备份带来的存储
350 0