r?命令可以让伪寄存器自动获取所赋参数的类型

(仅在指派伪寄存器时) 使得伪寄存器获得类型信息。可以使用任何类型

如,我们知道@$peb的类型是_PEB:

0:000> dt ntdll!*PEB*ntdll!_PEBntdll!_PEB_LDR_DATA
0:000> ? @$peb
Evaluate expression: 2147344384 = 7ffde000

值为7ffde000

0:000> dt -v ntdll!_PEB  @$peb
struct _PEB, 91 elements, 0x248 bytes+0x000 InheritedAddressSpace : 0 ''+0x001 ReadImageFileExecOptions : 0 ''+0x002 BeingDebugged    : 0x1 ''+0x003 BitField         : 0x8 ''+0x003 ImageUsesLargePages : Bitfield 0y0+0x003 IsProtectedProcess : Bitfield 0y0+0x003 IsLegacyProcess  : Bitfield 0y0+0x003 IsImageDynamicallyRelocated : Bitfield 0y1+0x003 SkipPatchingUser32Forwarders : Bitfield 0y0+0x003 SpareBits        : Bitfield 0y000+0x004 Mutant           : 0xffffffff +0x008 ImageBaseAddress : 0x00ac0000 +0x00c Ldr              : 0x77d97880 struct _PEB_LDR_DATA, 9 elements, 0x30 bytes+0x010 ProcessParameters : 0x00321a80 struct _RTL_USER_PROCESS_PARAMETERS, 30 elements, 0x298 bytes+0x014 SubSystemData    : (null) +0x018 ProcessHeap      : 0x00320000 +0x01c FastPebLock      : 0x77d97380 struct _RTL_CRITICAL_SECTION, 6 elements, 0x18 bytes+0x020 AtlThunkSListPtr : (null) +0x024 IFEOKey          : (null) +0x028 CrossProcessFlags : 0+0x028 ProcessInJob     : Bitfield 0y0+0x028 ProcessInitializing : Bitfield 0y0+0x028 ProcessUsingVEH  : Bitfield 0y0+0x028 ProcessUsingVCH  : Bitfield 0y0+0x028 ProcessUsingFTH  : Bitfield 0y0+0x028 ReservedBits0    : Bitfield 0y000000000000000000000000000 (0)+0x02c KernelCallbackTable : 0x76c4d568 +0x02c UserSharedInfoPtr : 0x76c4d568 +0x030 SystemReserved   : [1] 0+0x034 AtlThunkSListPtr32 : 0+0x038 ApiSetMap        : 0x77f00000 +0x03c TlsExpansionCounter : 0+0x040 TlsBitmap        : 0x77d97260 +0x044 TlsBitmapBits    : [2] 0xffffffff+0x04c ReadOnlySharedMemoryBase : 0x7f6f0000 +0x050 HotpatchInformation : (null) +0x054 ReadOnlyStaticServerData : 0x7f6f0590  -> (null) +0x058 AnsiCodePageData : 0x7ffa0000 +0x05c OemCodePageData  : 0x7ffa0000 +0x060 UnicodeCaseTableData : 0x7ffd0024 +0x064 NumberOfProcessors : 4+0x068 NtGlobalFlag     : 0x70+0x070 CriticalSectionTimeout : union _LARGE_INTEGER, 4 elements, 0x8 bytes0xffffe86d`079b8000+0x078 HeapSegmentReserve : 0x100000+0x07c HeapSegmentCommit : 0x2000+0x080 HeapDeCommitTotalFreeThreshold : 0x10000+0x084 HeapDeCommitFreeBlockThreshold : 0x1000+0x088 NumberOfHeaps    : 0xc+0x08c MaximumNumberOfHeaps : 0x10+0x090 ProcessHeaps     : 0x77d97500  -> 0x00320000 +0x094 GdiSharedHandleTable : 0x005c0000 +0x098 ProcessStarterHelper : (null) +0x09c GdiDCAttributeList : 0x14+0x0a0 LoaderLock       : 0x77d97340 struct _RTL_CRITICAL_SECTION, 6 elements, 0x18 bytes+0x0a4 OSMajorVersion   : 6+0x0a8 OSMinorVersion   : 1+0x0ac OSBuildNumber    : 0x1db1+0x0ae OSCSDVersion     : 0x100+0x0b0 OSPlatformId     : 2+0x0b4 ImageSubsystem   : 2+0x0b8 ImageSubsystemMajorVersion : 5+0x0bc ImageSubsystemMinorVersion : 1+0x0c0 ActiveProcessAffinityMask : 0xf+0x0c4 GdiHandleBuffer  : [34] 0+0x14c PostProcessInitRoutine : (null) +0x150 TlsExpansionBitmap : 0x77d97268 +0x154 TlsExpansionBitmapBits : [32] 1+0x1d4 SessionId        : 1+0x1d8 AppCompatFlags   : union _ULARGE_INTEGER, 4 elements, 0x8 bytes0x0+0x1e0 AppCompatFlagsUser : union _ULARGE_INTEGER, 4 elements, 0x8 bytes0x0+0x1e8 pShimData        : (null) +0x1ec AppCompatInfo    : (null) +0x1f0 CSDVersion       : struct _UNICODE_STRING, 3 elements, 0x8 bytes"Service Pack 1"+0x1f8 ActivationContextData : 0x00040000 struct _ACTIVATION_CONTEXT_DATA, 0 elements, 0x0 bytes+0x1fc ProcessAssemblyStorageMap : (null) +0x200 SystemDefaultActivationContextData : 0x00030000 struct _ACTIVATION_CONTEXT_DATA, 0 elements, 0x0 bytes+0x204 SystemAssemblyStorageMap : 0x00323e80 struct _ASSEMBLY_STORAGE_MAP, 0 elements, 0x0 bytes+0x208 MinimumStackCommit : 0+0x20c FlsCallback      : 0x003262a8 struct _FLS_CALLBACK_INFO, 0 elements, 0x0 bytes+0x210 FlsListHead      : struct _LIST_ENTRY, 2 elements, 0x8 bytes[ 0x326088 - 0x326088 ]+0x218 FlsBitmap        : 0x77d97270 +0x21c FlsBitmapBits    : [4] 0x1ff+0x22c FlsHighIndex     : 8+0x230 WerRegistrationData : 0x00420000 +0x234 WerShipAssertPtr : (null) +0x238 pContextData     : 0x00050000 +0x23c pImageHeaderHash : (null) +0x240 TracingFlags     : 0+0x240 HeapTracingEnabled : Bitfield 0y0+0x240 CritSecTracingEnabled : Bitfield 0y0+0x240 SpareTracingBits : Bitfield 0y000000000000000000000000000000 (0)

_PEB结构的大小为0x248 bytes,也可以这样看:

0:000> ?? @@c++(sizeof(ntdll!_PEB))
unsigned int 0x248

比如我们要把Ldr地址赋给伪寄存器,按理论:

   +0x00c Ldr              : 0x77d97880 struct _PEB_LDR_DATA, 9 elements, 0x30 bytes
0:000> dt -v ntdll!_PEB -ny Ldr @$peb
struct _PEB, 91 elements, 0x248 bytes+0x00c Ldr : 0x77d97880 struct _PEB_LDR_DATA, 9 elements, 0x30 bytes

应该是取@$peb+0xc=7ffde00c

使用r?,

0:000> r? $t0=@$peb->Ldr;r $t0
$t0=77d97880

我们发现取得了Ldr字段的内容,要取其地址,就使用&符号来取,和C++中含义一样:

0:000> r? $t0=&@$peb->Ldr;r $t0
$t0=7ffde00c

当然,我们也可以用*来取内容

0:000> r? @$t1=*(_PEB_LDR_DATA**)@$t0;r @$t1
$t1=77d97880
0:000> r? @$t1=*(DWORD**)@$t0;r @$t1
$t1=77d97880
0:000> r? @$t1=*@$t0;r @$t1
$t1=77d97880

转载于:https://www.cnblogs.com/hgy413/p/3693372.html

windbg学习----r?相关推荐

  1. WinDbg学习笔记(二)--字符串访问断点

    标 题: [原创]WinDbg学习笔记(二)--字符串访问断点 作 者: gaorqing 时 间: 2009-07-25,21:39:04 链 接: http://bbs.pediy.com/sho ...

  2. Windbg学习 (0x0012) 命令-批处理命令程序

    Windbg学习 (0x0012) 命令-批处理命令 转载于:https://www.cnblogs.com/ywnwa417/p/5678344.html

  3. 独家 | 手把手教你学习R语言(附资源链接)

    作者:NSS 翻译:杨金鸿 术语校对:韩海畴 全文校对:林亦霖 本文约3000字,建议阅读7分钟. 本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者 ...

  4. 推荐一款学习R的APP

    最近手机系统更新到安卓8.0,装了谷歌应用商店,走到墙外发现了许多好用的东西,今天给大家分享一款学习R比较好的APP--R programming solution. 这款软件特别适合初学者,它是从R ...

  5. WinDbg学习笔记(一)--认识WinDbg

    标 题: [原创]WinDbg学习笔记(一)--认识WinDbg 作 者: gaorqing 时 间: 2009-07-27,20:45:27 链 接: http://bbs.pediy.com/sh ...

  6. r语言pls分析_零基础学习R语言分析GEO

    关于零基础用R语言分析GEO的视频已更新完,发布在B站,有兴趣的小伙伴可以移驾到B站,我的B站号:I_am_Becky 之前录制过一系列关于零代码分析GEO数据的,但是这样画出来的图太low了,所以学 ...

  7. vector 赋值_从零开始学习R语言(一)——数据结构之“向量”(Vector)

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/59688569 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...

  8. 学习R语言这几本电子书就够了!

    如何学习R语言,如何高效学习R语言? 这里推荐几本线上的电子书,作者都在不断的更新,网页版的电子书,copy代码无障碍,无广告,很流畅. 张敬信老师写了一本书<R语言编程–基于tidyverse ...

  9. 一起学习R语言吧——R语言+RStudio

    一起学习R语言吧--R语言+RStudio 一.下载R 二.安装 RStudio 一.下载R 1.R语言官网下载 点击https://www.r-project.org/,进入官网后,点击downlo ...

最新文章

  1. **汇总CodeIgniter(CI)的数据库操作函数
  2. leetcode算法题--螺旋矩阵
  3. 使用 dotnet-outdated 维护项目 nuget 包版本
  4. 从头学习计算机网络_我如何通过从头开始构建网络爬虫来自动进行求职
  5. 前端学习(3222):函数式组件使用props
  6. 码农回家过个年,真心不容易!
  7. html中metaf属性ormat-detection的意义
  8. Android日志系统Logcat源代码简要分析
  9. MTK平台调试加密芯片ATSHA204A
  10. 初识面向对象(钻石继承,super,多态,封装,method,property,classmethod,staticmethod)...
  11. 实现mvcc_数据库中的引擎、事务、锁、MVCC(三)
  12. Mac AE2018软件安装及破解
  13. 电子合同的风险有哪些?小心别被坑了
  14. 计算机桌面颜色怎么换,电脑桌面字体颜色怎么改
  15. WSO2一般使用教程
  16. WIN10笔记本电脑右键桌面一直转圈 [解决]
  17. 云计算是什么,云计算的特点及主要形式
  18. HDU-1425 排序
  19. redis的sentinel mode
  20. 解决 oracle 错误ORA-01033

热门文章

  1. flutter网络请求dio的get、post、上传文件、下载文件总结
  2. CC++运算符优先级
  3. 请问在JAVA编程中什么叫耦合?什么又叫解藕? 悬赏分:0 - 解决时间:2008-3-8 12:55...
  4. HDwiki 6.0 图片大图不能正常显示的解决方法
  5. php 静态成员(static)抽象类(abstract)和接口(interface)
  6. git找回当前目录下误删的所有文件
  7. li标签行内元素高度及居中
  8. gtone eclipse plugin install
  9. axios的基本用法
  10. ECharts 常用图表一看即会「散点图」「饼图」「地图」「雷达图」「仪表盘」