windbg字符串比较条件断点
目的:
当寄存器指向字符串为与某个字符串相同时,断下程序。
问题关键:
需要把寄存器指向的字符串取出来比较,而别名可以做到这一点。
测试源码:
void main()
{
char buf[] = "shengfu";
char* p = buf;
__asm mov eax, p
}
断点:
1e0040141f[e:\hello\test2\test2.cpp@30]0001(0001)0:****test2!main+0x3f"$><e:/script.txt"
脚本e:/script.txt内容如下:
as /ma TMS_LI eax
.block
{
.if ( $scmp("TMS_LI", "shengfu") == 0 )
{
}
.else
{
gc
}
}
说明:
1.as/maTMS_LI eax表示为eax取了一个别名TMS_LI,/ma表示TMS_LI是以eax为首地址的ascz字符串
2.加个.block的原因是,别名要在block才生效,这个比较变态,文档中貌似没有,国外一高手说的http://analyze-v.com/?p=765。
3.下断点加入"$><e:/script.txt"时,$><后不能有空格,路径上也不能用反斜杠。
分享到:
相关推荐
3. **注册表和内存区域查看**:`r`查看寄存器状态,`dd`(双字节)或`du`(Unicode字符串)查看内存区域。 四、调试技巧与高级功能 1. **跟踪模块**:`lm`列出加载的模块信息,`!dlls`查看动态链接库的状态。 2. **...
WinDbg还提供了强大的内存检查功能,如`dd`命令可以查看内存区域的十六进制值,`du`命令则会以字符串形式显示内存内容。`!heap`系列命令用于分析堆内存,`!vad`命令可以帮助理解虚拟地址空间分布。 在分析系统崩溃...
3. **查看内存**:使用`dv`或`dt`命令查看变量和结构体,`du`显示内存中的字符串。 4. **调用堆栈**:`kb`或`k`命令显示调用堆栈,帮助理解程序执行流程。 ## 四、WinDBG高级特性 1. **注册表查看**:`r`命令可...
- `du <address>`: 显示ASCII字符串形式的内存内容。 - `dd <address>`: 显示指定地址的内存字节(4字节为一行)。 - `dc <address>`: 显示单字节的内存内容。 4. **断点设置** - `bp <address>`: 在指定地址...
7. **du** 或 **dd**:显示内存中的数据,前者用于显示字符串,后者用于显示字节。 8. **!heap -s**:查看堆的总体信息,包括总大小、空闲块等。 9. **bp** 或 **ba**:设置断点,前者基于地址,后者基于事件。 三...
- **数据查找**:`du`显示Unicode字符串,`dv`显示变量,`dt`显示类型。 - **调用堆栈**:`kb`显示调用堆栈,`kc`显示带有偏移量的堆栈,`kv`显示完整堆栈。 - **线程管理**:`!threads`列出所有线程,`~`选择...
使用“dd”命令可以显示内存区域的内容,而“du”则用于显示Unicode字符串。 5. **崩溃转储分析**:当系统崩溃产生内存转储文件时,Windbg能分析这些文件,重现问题发生时的状态。这在远程调试或者无法复现的问题...
这些命令的背后是精心设计的解析器和执行器,它们解析用户输入的命令字符串,然后调用相应的函数执行操作。通过阅读这部分代码,我们可以学习到如何构建一个高效且灵活的命令处理系统。 此外,WinDbg的源码还可能...
- `da`: 读取并显示内存的ASCII字符串。 3. **寄存器操作** - `r`: 查看和修改处理器寄存器的值。 - `dr`: 查看和修改调试注册表项。 4. **堆栈跟踪** - `k` 或 `kb`: 显示当前线程的堆栈回溯信息。 - `kv`: ...
4. **数据查看**:通过"dt"命令可以查看结构体或类的详细信息,"du"和"dc"分别用于显示Unicode字符串和字节串。此外,使用"!heap -s"可查看堆概览,"!analyze -v"用于分析崩溃信息。 5. **内存分析**:Windbg提供了...
3. **查看内存**:使用`dv`、`dd`和`du`命令查看变量值、内存区域和字符串。 4. **堆栈回溯**:`kb`命令显示堆栈信息,帮助理解程序执行流程。 三、高级功能 1. **注册表和内存分析**:通过`r`命令查看和修改...
8wekyb3d8bbwe是微软用来标识其应用的特定字符串,而版本号1.2108.26002.0则代表该版本发布于2021年8月,并有特定的构建编号。 总的来说,WinDbg Preview是一个强大的调试工具,对于开发者、系统管理员和故障排除...
3. **内存检查**:使用`dd`命令查看内存区域,或`du`命令查看字符串,有助于找出内存相关问题。 4. **调用堆栈分析**:`kb`或`k`命令可显示当前线程的调用堆栈,便于追溯错误来源。 5. **线程与进程管理**:`~`...
- `du`或`dv`显示内存中的字符串或变量。 - `dt`查看类型结构。 四、内核调试技巧 1. 内核模式调试:通过KDNet或硬件调试器接口进行远程内核调试。 2. 崩溃分析:使用`!analyze -v`扩展命令分析蓝屏错误(BSOD)的...
- 查找字符串:`!findstr`命令。 - 跟踪API调用:`!apihooks`显示API钩子。 - 使用脚本:通过`.cmdfile`加载自定义命令脚本,进行自动化分析。 这个压缩包中的"常用"可能指的是包含了一些常用的Windbg使用技巧和...
- `du`: 以Unicode字符串形式显示内存内容,有助于读取程序中的字符串。 3. **注册表操作** - `r`: 显示所有寄存器的当前值,包括CPU通用寄存器、控制寄存器等。 - `rd`: 查看或修改特定的寄存器值。 4. **符号...
首先,我们看一个简单的C语言程序,其功能是将字符串 "6969,3p3p" 中的数字3替换为4。但这段代码存在一个导致崩溃的bug。当程序运行到崩溃点时,Windbg 会捕获到这个异常,并显示相应的错误界面。 在开始调试之前,...
- `ds, dS`:显示字符串类型的数据结构。 - `dt`:显示数据类型信息。 ##### D. 编辑命令 (E/e, ea, eb, ed, eD, ef, ep, eq, eu, ew, eza, ezu) - **功能**:编辑内存中的数据。 - **使用场景**:在调试过程中...
2. **数据查看命令**:如`dv`(显示变量)、`dt`(显示类型结构)和`du`(显示Unicode字符串)。 3. **内存操作命令**:如`db`(显示字节)、`dc`(显示字)和`dd`(显示双字)。这些命令可帮助我们查看内存中的数据...
4. 查看内存:`dd`显示内存数据,`du`显示Unicode字符串,`dc`显示字符数据。 5. 跟踪线程:`!threads`命令列出所有线程,`~`操作符选择并切换线程。 四、Windbg高级功能 1. 静态与动态符号处理:`lm`列出模块,`!...