问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

windbg 怎么使用sos命令

发布网友 发布时间:2022-05-01 00:17

我来回答

2个回答

懂视网 时间:2022-05-01 04:38

准备终止”列表中的对象为不再为根的可终止对象。此选项可能耗费大量资源,因为它验证可终止队列中的所有对象是否仍然为根对象。

 

-short 选项将输出限制为每个对象的地址。如果与-allReady 一起使用,则将枚举具有不再为根的终结器的所有对象。如果单独使用,则将列出终结和“准备终结”队列中的所有对象。

 

19.  设置断点

 

!bpmdSystem.Windows.Forms.dllSystem.Windows.Forms.MessageBox.Show

 

第一个参数是dll文件名,第二个是完整的方法名。

 

20.  查看所有断点列表

 

bl

 

21.   释放当前断点, 让程序继续运行。让程序运行到断点后WinDBG会自动停下来。

 

g

 

22.   显示公共语言运行时版本。

 

!eeversion

 

23.   清除屏幕信息,该命令还你一个清洁的屏幕

 

.cls

 

24.   退出当前调试

 

q

 

 

 

 

//断点相关

 

bp + 地址设置断点

bl  显示已经设定的断点

bu + 地址设置断点,但是这种类型断点再下一次启动时被记录

bc 清除断点

对于断点范围,可以用*匹配,-表示一个范围,表达多个可用,号隔开

 

程序入口伪寄存器

WinDbg里有个伪寄存器叫$exentry,里面记录了程序的入口点。所以我们只要在命令输入栏里输入

bp $exentry

(bp就是用来下断点的命令,详细用法可以参考WinDbg的帮助文档)

 

//调试符号

 

ld kernerl32 //加载kernerl32模块的符号

lm   m k*        //显示已经加载的,以k开头的模块

ln         //显示最近操作过的模块名

dt dbg2     //检测模块

 

[[[[[[[[[[[[]]]]]]]]]]]]

x kernerl32!k* 显示模块kernerl32中所有以k开头的函数

dv 显示局部变量值

dv /i/t/v 显示局部变量的类型,值相关信息。

x <module>!* / ? 显示指定模块的符号

x argc 查看变量argc的值。

dt argc 查看变量值

dt _PEB 7ffdd00 将内存地址7ffdd00开始的内容以PEB结构的方式显示出来。

dd 12000 L4 查看地址12000 后面的四个字

dds 12000 L100 查看堆栈上地址12000开始,后面的100个dword的内容,如果有调试符号,会将符号显示。此方法来追踪堆栈。(先看ebp,再用此方法)

dd ebp + 4, 返回地址, ebp + 8 第一个参数

 

[[[[[[[[[]]]]]]]]]

.kill 杀死调试进程

.restart 重新调试

 

[[[[[]]]]]]]]]]]]]]

k 显示调用堆栈

,kn加序号而已。

kb 显示前三个参数。第一个参数ebp+8;第二个ebp+0x0C;第三个ebp+0x10;dd ebp+0x14是第四个参数

kp 显示函数参数类型,数值

kp f f开关显示相邻栈基之差,从而可以推断出栈的健康状况。

 

[[[[[[[[[[]]]]]]]]]]

| 显示进程

~显示线程

~0 s 切换到 0号线程

 

[[[[[[[[[]]]]]]]]]

dv 显示函数参数&局部变量,注意,dv是跟栈帧相关的,对不同的栈帧显示不同的局部变量。

@1, kn 显示所有栈帧

@2, .frame选择想要查看的栈帧

@3, dv /i/v/t显示该栈帧里局部变量信息

@3, dv /i /V /t 显示变量基于栈帧的地址

如果没有私有符号,dv是不能显示变量信息的。

vc 生成的调试符号*.pdb windbg不认识,需要设置为c++/General/DebugInfo= C7 compatible

=====

sympath + c: asm 添加符号搜索路径

.sympath 显示符号搜索路径

//显示一定范围内存

!db L 32 : results in 32 bytes being displayed (as hexadecimal bytes),

//查看pe信息

!dh [Options] Address : 查看模块pe信息

!dh -f : display file headers

!dh -s : section headers

!dh -a : all header informations

查看结构体成员

dt nt!_EPROCESS

查看当前的irql

!irql

查看Verifier 检测统计信息

!verifier

查看某个内存地址属于那一个模块

!pool 地址

!lmi Address  : 查看模块的主要信息

!pcr 可以查看当前执行的线程及irql, 等信息

//

Why doesn‘t the WinDBG command !irql always return the correct IRQL for my target?

[Answer by Jake Oshins, jakeo_at_windows_dot_microsoft_dot_com. Workaround provided by James Antognini, antognini_at_mindspring_dot_nospam_dot_com, 27 August 2003]

!irql currently only produces useful results on a crashdump, not a live system. To retrieve the current IRQL on a live system you should instead use the !pcr command.

!processfield:列出EPROCESS的成员

该命令前的!号,意味着它来自于调试器的扩展模块―kdextx86.dll。该命令可显示内核用来代表一个进程的EPROCESS结构(该结构并没有正式的说明文档)的成员及其偏移量。

尽管该命令仅列出了成员的偏移量,但你也能很容易的猜出其正确的类型。例如,LockEvent位于0x70处,其下一个成员的偏移量为0x80。则该成员占用了16个字节,这与KEVENT结构非常类似。

 

!threadfields:列出ETHREAD成员

这是kdextx86.dll提供的另一个强大的选项。和!processfields类似,它列出未文档化的ETHREAD结构的成员及其偏移量。内核使用它表示一个线程.

 

//进程信息

!tep

!peb ,显示peb(进程信息)

 

//显示相关

dt ntdll!*teb* 列出匹配通配符的结构名

dt -v -r ntdll!_TEB

列出结构_TEB的成员信息

 

//显示变量地址

r $peb 显示模块peb的地址

 

//查看错误信息

!gle

 

//设置断点的技巧

可以直接把断点设在: kernel32!BaseProcessStart

1), 先用lm 显示所有已经加载的模块

2), dt our_exe_name!*main*  //在我们的程序模块中搜索包含main的地址(注意:如果未加载symbol是不能显示的!)

3), 如果存在,在our_exe_name!*main 处设置断点

=======

Command     SoftICE OllyDbg

Run         F5     F9

Step Into     F11 F7

Step Over     F10 F8

Set Break Point F8 F2

搜索内存

 

5、查找字符串

在步骤1我们运行程序时就记录了提示注册错误的字符串“Wrong Serial, try again!”,现在我们就要在内存找到该字符串的位置。

输入命令

s –a 00400000 L53000 “Wrong”

该命令的意思是以ASCII码形式在内存地址00400000往后53000个字节搜索字符串“Wrong”。

s,就是要调用查找的命令

-a,指定使用ASCII码的形式查找

00400000,指定要开始寻找的内存地址。

L53000,说明要在00400000往后的53000字节搜索。这个数值和00400000都可以从Stud_PE获得。00400000是程序的装入地址,而53000是映像的大小,也就是程序载入内存后占用的内存大小。使用这两个数值,基本上可以搜索到程序使用的整个内存范围。

“Wrong”,就不用多解释了,就是我们要寻找的字符串。不过WinDbg不支持模糊搜索,所以这里输入的字符串必定要完全正确。

内存访问断点

 

6、下内存访问断点

WinDbg中,ba命令代表Break On Access,即访问时中断。

我们在命令行输入:

ba r 1 0044108c

命令的意思是在内存0044108c的位置下字节的读断点。命令中各元素的含义可以参考帮助文档,这里不啰嗦。

输入bl,查看断点使用情况:

 

地址运算

? 0x33 + 0x44

运行后将得到计算和

 

3.查看和修改数据

调试中不可避免的要查看和修改数据

查看内存:

db/dw/dd/dq [Address]       字节/字/双字/四字方式查看数据

da/du [Address]           ASCII字符串/Unicode字符串方式查看指定地址

其它常用的如查看结构

dt nt!_EPROCESS

dt nt!_EPROCESS 89330da0 (把0x89330da0作为对象指针)

修改内存:

eb/ew/ed/eq/ef/ep Address [Values]

字节/字/双字/四字/浮点数/指针/

ea/eu/eza/ezu Address [Values]

ASCII字符串/Unicode字符串/以NULL结尾的ASCII字符串/以NULL结尾的Unicode字符串

搜索内存:

s -[b/w/d/q/a/u] Range Target

搜索字节/字/双字/四字/ASCII字符串/Unicode字符串

 

2.断点

断点之于调试当然是非常重要的

常用命令:

bp [Address]or[Symbol] 在指定地址下断

可以使用地址或符号,如

bp 80561259(Windbg默认使用16进制)

bp MyDriver!GetKernelPath

bp MyDriver!GetKernelPath+0x12

bp [Address] /p eprocess 仅当当前进程为eprocess时才中断

这个很常用,比如你bp nt!NtTerminateProcess,但是只想在某一进程触发此断点时才断下来,那就加上这个参数吧,因为内核中的代码是各个进程共用的,所以此命令很实用

bp [Address] /t ethread 仅当当前线程为ethread时才中断,用法跟/p参数类似

bu [Address]or[Symbol] 下一个未解析的断点(就是说这个断点需要延迟解析)

这个也很常用,比如我们的驱动名为MyDriver.sys,那么在驱动加载之前下断bu MyDriver!DriverEntry,

然后加载这个驱动时就可以断在驱动入口,并且这个是不需要调试符号支持的

bl 列出所有断点,L=List

bc[id] 清除断点,c=Clear,id是bl查看时的断点编号

bd[id] 禁用断点,d=Disable,id即断点编号

be[id] 启用断点,e=Enable,id为断点编号

 

windbg常见命令

标签:

热心网友 时间:2022-05-01 01:46

首先, 可以选择从命令行中启动WinDBG. 举例, 使用下面的带有-logo参数的命令: windbg.exe -logo c:\logfile.txt 其次, 如果你已经在一个debug session里了, 你可以使用.logopen命令来开始记录. 第一步, 开启日志记录: .logopen d:\output.txt 第二步, 运行你想要输出到文本文件中的命令:!address 第三步, 关闭日志记录: .logclose 第四步, 检查是否还有日志记录打开: 比方说你抓了个full mp, 在debug一个很复杂的问题, 可能你已经有了结果, 或者还在研究当中, 这时你被别的事情打搅了, 回家了, 第二天来重开mp文件, 不记得昨天做到哪里了. 在或者说, 你的同事很牛, 他分析了mp文件并得出了结论. 你想学一下他的思路. 在这两种情况下, 让windbg把曾经输入过的命令按顺序写到文件里的功能就相当有帮助了.命令举例如下:
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
新生儿脐疝的诊断与鉴别 小儿脐疝发病原因 导致新生儿脐疝发作的原因有哪些? 腾讯视频2023年10月24日免费会员账号分享-腾讯视频2023年10月24日免 ... 百度网盘激活码免费领取2024 百度网盘激活码免费领取最新分享 我是男生 今年18周岁 我身高172是不是完蛋了 我还会长吗? 估计还能长... 开荒保洁一平米多少钱 物业开荒费用包括哪些 公司保洁开荒多少钱一平 开封灌汤包哪家正宗 开封哪家灌汤包最好吃 绿色的学位服是什么? 淘宝上买procreate会不会被盗号 怎样用聊天图片制相册? 淘宝账号是怎么被盗的,进来看看就知道了哦 请问谁知道梦见打雷有什么预示?能不能从心理学角度解释? 求英语骂人顺口溜 为什么淘宝的商家要问我淘宝号,说要登记?这会不会被盗号啊 融资租赁的业务都有什么呢 价值立方? 关于民族团结的快板、顺口溜 如何做好融资租赁工作 LOL下路adc和上路ad哪条路更有前途 ...梦见打雷闪电雷特别特别响,请问有谁知道这是什么意思?本人特别... 你觉得现在去融资租赁行业工作好吗? 梦见打雷,由于在野外,害怕被击中,所以只好趴在地上,而且内心非常害怕!这是什么征兆? 在融资租赁公司工作体验如何? 英雄联盟里队友们常说的ap。 ad。 tank。gank。还有一些什么3个英文的都是什么意思? 开心麻花不忘初心台词,顺口溜那段 开黑吗我下路ad我上路游走亚索和鲁班段子的完整版搞笑的? 飞艇如何降落? 为什么word彩色字体打不出来 ...谈谈如何做好单位的职业卫生工作,保障员工的身体健康做? 梦见鲜花周围有昆虫,有蝴蝶,有两小麻雀是什么意思? 头脑不清晰怎么办 每天头脑不清楚, 头总是迷迷糊糊的,头脑不清晰是什么原因 脑子不清晰是怎么回事呢? 人大脑总是模糊不清好象有什么东西在里面不知怎么回事? 头脑不清醒,眼睛看东西模糊 计提资产减值准备的账务处理及资产减值准备的计算过程 头脑不清醒,神志不清什么原因啊 我总是感觉我的大脑不是很清晰,是怎么回事 固定资产减值准备账务处理 头昏头胀头脑不清晰视力模糊是怎么回事 头迷糊、脑子不清楚是什么原因 整天没精神,感觉很困。头脑不清,反应迟钝是怎么回事 有时感觉头脑不清楚,说不清什么感 感觉头脑不清醒,思路不清晰什么原因 走神,神智不清,记忆差,大脑反应慢,头脑麻木是怎么回事? 头脑不清楚头蒙到底是什么病 带千辰二字的藏头诗