OD里SHIFT+F4条件断点用法篇
- 格式:doc
- 大小:97.50 KB
- 文档页数:4
附个断点表:常用断点(OD中)拦截窗口:bp CreateWindow 创建窗口bp CreateWindowEx(A) 创建窗口bp ShowWindow 显示窗口bp UpdateWindow 更新窗口bp GetWindowT ext(A) 获取窗口文本拦截消息框:bp MessageBox(A) 创建消息框bp MessageBoxExA 创建消息框bp MessageBoxIndirect(A) 创建定制消息框bp IsDialogMessageW拦截警告声:bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)拦截对话框:bp DialogBox 创建模态对话框bp DialogBoxParam(A) 创建模态对话框bp DialogBoxIndirect 创建模态对话框bp DialogBoxIndirectParam(A) 创建模态对话框bp CreateDialog 创建非模态对话框bp CreateDialogParam(A) 创建非模态对话框bp CreateDialogIndirect 创建非模态对话框bp CreateDialogIndirectParam(A) 创建非模态对话框bp GetDlgItemText(A) 获取对话框文本bp GetDlgItemInt 获取对话框整数值拦截剪贴板:bp GetClipboardData 获取剪贴板数据拦截注册表:bp RegOpenKey(A) 打开子健bp RegOpenKeyEx 打开子健bp RegQueryValue(A) 查找子健bp RegQueryValueEx 查找子健bp RegSetValue(A) 设置子健bp RegSetValueEx(A) 设置子健功能限制拦截断点:bp EnableMenuItem 禁止或允许菜单项bp EnableWindow 禁止或允许窗口拦截时间:bp GetLocalTime 获取本地时间bp GetSystemTime 获取系统时间bp GetFileTime 获取文件时间bp GetTickCount 获得自系统成功启动以来所经历的毫秒数bp GetCurrentTime 获取当前时间(16位)bp SetTimer 创建定时器bp TimerProc 定时器超时回调函数GetDlgItemInt 得指定输入框整数值GetDlgItemText 得指定输入框输入字符串GetDlgItemTextA 得指定输入框输入字符串拦截文件:bp CreateFileA 创建或打开文件(32位)bp OpenFile 打开文件(32位)bp ReadFile 读文件(32位)bp WriteFile 写文件(32位)GetModuleFileNameAGetFileSizeSetfilepointerfileopenFindFirstFileAReadFile拦截驱动器:bp GetDriveTypeA 获取磁盘驱动器类型bp GetLogicalDrives 获取逻辑驱动器符号bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径★★VB程序专用断点★★文件长度:RtcFileLenbp __vbaFreeStr 对付VB程序重启验证bp __vbaStrCmp 比较字符串是否相等bp __vbaStrComp 比较字符串是否相等bp __vbaVarT stNe 比较变量是否不相等bp __vbaVarT stEq 比较变量是否相等bp __vbaStrCopy 复制字符串bp __vbaStrMove 移动字符串bp MultiByteToWideChar ANSI字符串转换成Unicode字符串bp WideCharToMultiByte Unicode字符串转换成ANSI字符串=============== ================密码常用中断Hmemcpy (win9x专用)GetDlgItemTextAGetDlgItemIntvb:getvolumeinformationavbastrcomp (trw)Bpx __vbaStrComp (记得是两个'_')MSVBVM60!_vbastrcomp|soficeMSVBVM50! |VBAI4STRCtrl+Dbpx msvbvm60!__vbastrcomp do "d *(esp+0c)"(softice)按几次F5出册码出来了。
shift+F4条件断点⾼⼿就不必看了~,若有错误的地⽅请指正!先说⼀点 ALT+L 看记录~在某条语句上按了SHIFT+F4后出现了个对话框,1)第⼀⾏是"条件": 要输⼊的肯定是你感兴趣的条件啦,⽐如说下⾯的俩句0041150 push eax0041151 call [TranslateMessage]你在0041150处下条件记录中断,假如这时候你要是想知道ESI等不等于0,那就可以设置条件 ESI==0 或ESI!=0 反正是关于ESI的条件了⽽不是只能利⽤这⾏的EAX. 当然⼀样可以在0041150处下断追消息,⽐如说你想知道按了⽼⿏标移动消息,那么就设置 MSG==WM_MOUSEMOVE 或是 MSG==0200(移动的数字代码). 有⼈该问了,消息记录好象应该在下⼀⾏有函数的下断才正确吧?其实不⼀定⾮要在传递消息的那⾏0041151下断的,但在那⾏下断的好处是可以记录到函数参数,这在下⾯会讲到~"条件"这的书写是按照 MASM32汇编的形式书写的,⽐如 == != > <2)"说明"="表达""解码表达式的值""说明"就是个注释啦,添不添⽆所谓了,除⾮你下的记录中断⽐较多,这样在记录⾥能看的明⽩~"表达"其实就是我们记录的核⼼啦,程序在我们第1⼩条⾥的"条件"为真的时候,就会记录我们在"表达"⾥填的内容,⽐如说ESI==0的时候,我们记录 [eax+4]的值反正是你感兴趣的内容啦,若是想记录消息就添 MSG 啦,很多时候我们只添了"条件"⽽没有添"表达",程序中断后就会显⽰"未知的函数或标识符!",这就是原因了.⾄于下⾯的"解码表达式的值"你可以随便选了,他不过是把记录后的数据⼜分析了⼀下, ⽐如说我们记录了[eax+4]的值是 201 ,那么当你选"信息代码(WM_XXX)"的时候那么你在记录(ALT+L看记录)⾥看到的就是被分析成了 201 WM_LBUTTONDOWN当你选"布尔数值",那么记录⾥数值201后⾯就会跟个 TRUE了,其实就是OD对这个数据按照我们选择的类型⼜进⾏了⼀次分析⽽已~~3)暂停程序 => 永不条件满⾜时永远这三个选择就是条件为真记录表达的时候程序暂不暂停程序,那就看你调试的需要了~4)记录表达式的值 => 永不条件满⾜时永远呵呵,要是选"永不",那么我们设⽴记录"表达"还有啥意义啊, 若是选"永远",那么条件似乎不就没意义了,因为记录的时候已经不管条件了,只要运⾏到这就记录表达.不过好象也可以利⽤的,⾃⼰去想想啦..我不说.⼀般都是选"条件满⾜"啦.5)记录函数参数 => 永不条件满⾜时永远这个要是你下在没函数的那⾏,那么这⾏就变灰了~~ 记录函数的参数很有意义啊,直接可以看到很多信息,我们⽐如说在有函数的那⾏下条件记录."条件"是 EAX==0 "表达"是 [EAX+4],然后在这选择记录函数参数在"条件满⾜时" ;当然你若只想记录运⾏到此处的函数参数,那么就空着"条件"和"表达"吧,同时3)和4)的选择也要变为"永不"了...也许你在记录了啥也看不到,因为运⾏到这⾏可能EAX总不=0 ,那么好换换 EAX>0 ,好象看了到⼀堆,然后还有PMSG =XXXX Hw=XXXX,这就是运⾏到这⾥这个函数的参数啦~~ 我们也可以记录 CREATFILEA 函数,那么就知道都打开什么⽂件了~~6) "运⾏次数":0为⽆限次7) "如果程序暂停,发动如下参数到插件中..."我不会,我就会上⾯那些,希望⾼⼿给补充⼀下,好让我们这些菜鸟学学~~注意⼀点: 我们在OD菜单"查看"=>"窗⼝"⾥也可以⽤⽼⿏标右键给窗⼝过程下消息断点,下完后你可以⽤SHIFF_F4打开那个消息断点,发现它其实就是条件记录断点的⼀种形式⽽已~~~举个例⼦吧:⽐如说⼀个程序要求注册,点后出现⼀个注册窗⼝那么我们就要对点注册按钮下断,看看它之后执⾏了什么~~注册窗⼝如果是对话框,那么肯定要⽤函数 CreatDialoParam或DialogBoxParam 若你对这俩函数都不了解的话,那就去看看书吧...⾸先⽤OD⾥的插件"窗⼝⼯具"获得注册按钮的标识(即ID),⽐如说是0422,记录下来备⽤啦~,在OD⾥对这俩函数下断,然后执⾏程序,让注册窗⼝显⽰就会中断,OD⾥看堆栈,此函数的第4个参数pDlgProc就是对话框的过程⼊⼝了,这⾥是0041b0b0是⼊⼝去对话框⼊⼝处,SHIFT+F4,在"条件"⾥输⼊ [ESP+8]==0111 && [ESP+C]==0422"表达"可以空着,暂停程序在"条件满⾜时"⼜该问了,为什么这么写? 请记住: 由于是过程调⽤,肯定要先向堆栈⾥压数据的,也就是标准说法:传递参数! 对于对话况过程或窗⼝过程,执⾏到⼊⼝处的时候堆栈内肯定压⼊的是MSG消息结构的数据,那么 [ESP+8]正好是WM_xx x消息,由于点了按钮我们肯定要抓的是WM_COMMAND消息也就是111啦,这个不明⽩去看书~ [ESP+C]是Wparam参数,就是窗⼝的ID号了,这个条件就是当你按下了ID为422的注册按钮的时候中断,接下来你就可以单步看了~~当然,你⽤窗⼝⼯具的时候也能看到按钮的⼦窗⼝句柄,这时候 {ESP+10]就是它的数值了,也⼀样可以代替 {ESP+C]==0422的条件了.其实都⼀样的,友⼈该说了,不会⽤⼯具怎么办啊,那就直接在过程⼊⼝下SHIFT+F4啦,条件和表达都空着,只选记录函数参数,那么就能得到⼀堆记录了,找到显⽰有 WM_COMMAND的消息,把他的内容⾥的ID做为[ESP+C]==的数值,⼀个个试啦。
OD快捷键使用大全。
非常详细(游戏逆向分析必看)分类:反汇编 2013-01-19 01:05 2713人阅读评论(0) 收藏举报快捷键无论当前的OllyDbg窗口是什么,这些快捷键均有效:Ctrl+F2 - 重启程序,即重新启动被调试程序。
如果当前没有调试的程序,OllyDbg会运行历史列表[historylist]中的第一个程序。
程序重启后,将会删除所有内存断点和硬件断点。
译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。
Alt+F2 - 关闭,即关闭被调试程序。
如果程序仍在运行,会弹出一个提示信息,询问您是否要关闭程序。
F3 - 弹出“打开32位.EXE文件”对话框[Open 32-bit .EXE file],您可以选择可执行文件,并可以输入运行参数。
Alt+F5 -让OllyDbg总在最前面。
如果被调试程序在某个断点处发生中断,而这时调试程序弹出一个总在最前面的窗口(一般为模式消息或模式对话框[modal messageor dialog]),它可能会遮住OllyDbg的一部分,但是我们又不能移动最小化这个窗口。
激活OllyDbg(比如按任务栏上的标签)并按Alt+F5,OllyDbg将设置成总在最前面,会反过来遮住刚才那个窗口。
如果您再按一下Alt+F5,OllyDbg会恢复到正常状态。
OllyDbg是否处于总在最前面状态,将会保存,在下一次调试时依然有效。
当前是否处于总在最前面状态,会显示在状态栏中。
F7 -单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。
如果当前命令是是含有REP前缀,则只执行一次重复操作。
Shift+F7 -与F7相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步入被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F7 -自动步入,在所有的函数调用中一条一条地执行命令(就像您按住F7键不放一样,只是更快一些)。
vscode断点条件表达式摘要:一、引言二、VSCode 断点条件表达式的概念与作用三、VSCode 断点条件表达式的语法与使用方法四、VSCode 断点条件表达式的常见应用场景五、总结正文:一、引言VSCode 作为一款功能强大的代码编辑器,提供了丰富的调试功能。
其中,断点条件表达式是调试过程中非常实用的一个功能,可以帮助开发者在更精确的条件下暂停代码执行,以便进行调试。
本文将详细介绍VSCode 断点条件表达式的相关知识。
二、VSCode 断点条件表达式的概念与作用断点条件表达式是一种在调试过程中设置断点的方式,可以根据设定的条件来判断是否在当前代码位置暂停执行。
这样,开发者可以在最符合需求的地方进行调试,提高调试效率。
三、VSCode 断点条件表达式的语法与使用方法VSCode 断点条件表达式的语法如下:```breakpoint(condition)```其中,`condition`为条件表达式,用于指定断点的触发条件。
使用方法如下:1.在需要设置断点的地方,点击左侧行号旁边的空白区域,打开设置断点的菜单。
2.在菜单中选择“添加断点”或者直接按F9 键。
3.在弹出的断点设置对话框中,选择“条件”选项卡。
4.在“条件”输入框中输入断点条件表达式,并按Enter 键确认。
四、VSCode 断点条件表达式的常见应用场景1.调试复杂逻辑:在涉及到多个条件判断的逻辑中,使用断点条件表达式可以帮助开发者更精确地定位问题,避免在无关紧要的地方浪费时间。
2.调试特定条件下的代码:当开发者想要在特定条件下运行代码时,可以使用断点条件表达式来实现。
例如,设置一个断点,当某个变量的值等于特定值时暂停执行。
3.调试多线程程序:在多线程程序中,使用断点条件表达式可以实现在不同线程间暂停执行,以便对各个线程进行单独调试。
五、总结VSCode 断点条件表达式是调试过程中非常实用的一个功能,可以帮助开发者更精确地设置断点,提高调试效率。
OD条件与消息断点的设置方法一、条件断点:使用方法(如):在当前行按[Shift+F2]键->条件断点(这个不太好用,因为程序BUG偶尔失效)。
在当前行按[Shift+F4]键->条件记录断点(只要设置上条件语句和按什么条件生效就可以了)。
条件语句(如):EAX == 00401000 ; 当EAX的值为00401000时。
[EAX] == 05201314 ; 比如EAX的值为00401000,而地址00401000处所指向的值等于5201314时,即EAX的值表示为指针。
[[EAX]] == 05201314 ; 比如EAX的值为00401000,地址00401000处所指向的值为00402000,而地址00402000处所指向的值等于5201314时,即EAX的值表示为指针的指针。
EAX == 05201314 && EBX == 0x05201314 ; 当EAX的值等于5201314(十进制),并且EBX的值等于5201314(十六进制)时。
[EBP+8] == WM_COMMAND ;[[EBP+8]] == 05201314 ;byte ptr[EAX] == 'y' ;[EAX] == "coderui" ; 比如EAX的值为00401000,而地址00401000处所指向的字符串为“coderui”时,即EAX的值表示为指针。
[[EAX+4]+4] == WM_LBUTTONUP ;以上写法的意思就是命令行里面直接输入,下面我写下具体的范例,还傻乎乎的用[Shift+F2]键,上面是网上的说的模糊。
比如要断点0x3565656 这个代码地址。
那么他的条件可以写在后面。
如下所示。
bp 0x3565656 [EBP+8] == WM_COMMAND// 当 [EBP+8] 等于 WM_COMMAND的时候断下来bp 0x3565656 [[EAX+4]+4] == WM_LBUTTONUP//当[[EAX+4]+4] == WM_LBUTTONUP的时候断下来bp 0x3565656 [[EBP+8]] == 05201314//当 [[EBP+8]] == 05201314 的时候断下来所谓心跳包的过滤液是如此。
Excel公式调试教你如何使用F键和条件断点调试Excel公式在使用Excel时,我们经常会遇到需要编写复杂公式的情况。
有时,我们可能发现公式的结果与预期不符,这时就需要进行调试来排查问题所在。
Excel提供了一些调试工具,其中包括使用F键和条件断点来调试公式。
本文将介绍如何使用这两种工具来调试Excel公式,以帮助你更有效地解决公式中的错误。
一、使用F键调试Excel公式F键是Excel中调试公式的快捷键,它能够逐步执行公式并显示每个步骤的结果,以便你更好地了解公式的运算过程。
下面是使用F键调试Excel公式的步骤:1. 首先,选择包含你要调试的公式的单元格。
2. 按下F9键,Excel会将公式中的所有引用替换为计算结果,同时显示计算过程中每个步骤的结果。
3. 在结果栏中,你可以看到公式的中间计算结果。
你可以使用滚动条来查看更多的结果。
4. 按下Esc键,退出公式的调试模式。
使用F键调试Excel公式可以帮助你更好地了解公式的计算过程,并进一步找出错误所在。
但需要注意的是,当公式涉及到大量计算时,使用F键可能会导致Excel运行缓慢,因此建议在需要调试的公式较为简单的情况下使用。
二、使用条件断点调试Excel公式条件断点是Excel提供的另一种调试工具,它能够在公式满足特定条件时中断运行并显示中间结果。
通过使用条件断点,你可以有针对性地查找并解决公式中的问题。
下面是使用条件断点调试Excel公式的步骤:1. 首先,选择包含你要调试的公式的单元格。
2. 在Excel的功能区中,点击“公式审查”选项卡,然后点击“条件断点”。
3. 在条件断点窗口中,输入一个条件,例如:“结果大于100”,然后点击“确定”。
4. 当公式满足条件时,Excel会中断运行并显示中间结果。
你可以根据这个中间结果进行调试和问题排查。
使用条件断点可以帮助你在公式执行过程中找出问题所在,并及时采取措施进行修复。
需要注意的是,如果你设置了多个条件断点,在公式运行过程中每个条件满足时都会中断运行,这可能会导致调试效率降低。
使用Debug 调试一个程序设置断点☐控制程序直接运行到指定地点,然后查看运行到这个地方时程序的状态,如变量的值、调用栈的情况等。
方法是,通过设置断点来达到这一目的。
☐设置断点的方式是:将鼠标光标移到程序行要设置断点的地方,按F9键或工具条中手形按钮(再按一次表示取消设置),此时在该程序行左侧出现一个红色圆点,表示断点设置成功。
将光标移到这一行按下F9键出现红色圆点,断点设置成功启动调试 按F5键(或选择“Build →Start Debug →Go ”或选择工具栏上的GO 图标),设置程序调试的起始点,就可以启动调试程序。
程序会一直运行到需要用户输入或者有断点的代码处。
按下F5出现黄色箭头并弹出DOS 窗口查看变量值1) 可以将鼠标移动到程序的变量名处,系统会自动为你显示变量的值;将鼠标放到PI 处即显示它的值程序执行点变量窗口监视窗口2) 复杂变量(如对象)可以通过QuickWatch 查看,方法是:将光标定位到所要查看值的变量处,按鼠标右键,选择QuickWatch 菜单,就可以看到变量值。
在变量area 上单击鼠标右键,并选择下拉菜单中的QuickWatch弹出对话框QuickWatch可以看到area的值为1904.003)启动调试程序后,屏幕下方将会出现两个输出窗口,一个是Watch ,另一个是Variable 。
Watch 窗口显示变量名和变量值,你可以在Watch 窗口中加上你想观察值的变量名,也可以直接从源代码中选择变量名,并把它拖动到Watch 窗口中。
Variable 窗口显示程序当前运行上下文涉及的变量的值。
选中area 并将其拖到Watch 窗口单步执行从Debug 菜单或Debug 工具栏中单击StepOver 选项或按F10两次。
在程序运行的DOS 窗口中输人选择的图形类型,单步执行时每次执行一行语句,便于跟踪程序的执行流程。
因此为了调试方便,需要单步执行的语句不要与其它语句写在一行中。
断点调试的基本方法断点调试是一种常用的程序调试技术,它可以帮助开发人员定位和解决程序中的错误和问题。
通过在代码中设置断点,我们可以让程序在指定位置暂停执行,以便我们可以逐行查看代码的执行情况、变量的值以及程序流程。
本文将介绍断点调试的基本方法,包括设置断点、运行程序、调试控制等方面。
1. 设置断点在开始进行断点调试之前,我们首先需要在代码中设置断点。
通常情况下,我们会选择在可能出现问题或者感兴趣的位置设置断点。
在一个循环中,我们可以选择在每次循环迭代时设置断点,以便查看每次迭代时变量的值。
在大多数集成开发环境(IDE)中,设置断点非常简单。
只需要在代码行号处点击鼠标左键或者使用快捷键(通常是F9),就可以在该位置设置一个断点。
一旦成功设置了一个断点,该行代码前面会出现一个小圆圈标记。
2. 运行程序当我们完成了断点的设置之后,就可以开始运行程序进行调试了。
通常情况下,我们会选择以调试模式启动程序,这样可以让程序遇到断点时暂停执行,以便我们进行调试。
在大多数IDE中,可以通过点击菜单栏上的“调试”或者“Debug”按钮来启动程序的调试模式。
启动调试模式后,程序会按照正常的方式运行,直到遇到第一个断点。
一旦程序遇到断点,它会暂停执行,并且我们可以查看当前代码行的状态和变量的值。
3. 调试控制一旦程序进入了调试模式并且遇到了断点,我们就可以利用调试工具来查看和控制程序的执行。
下面是一些常用的调试控制方法:•单步执行(Step over):这个功能可以让我们一次执行一行代码,并且不进入函数或方法内部。
如果当前行是一个函数或方法的调用,那么该函数或方法会被整体执行完毕,并且返回结果。
•单步进入(Step into):这个功能可以让我们进入函数或方法内部,并且逐行执行其中的代码。
如果当前行是一个函数或方法的调用,那么会跳转到该函数或方法内部的第一行。
•单步返回(Step out):这个功能可以让我们从当前函数或方法内部跳出,并返回到它的调用位置。
od 硬件条件断点OD(OpenOCD)是一种开源的调试和仿真工具,可以在嵌入式系统中使用。
它支持硬件条件断点,这是一种在特定条件触发时暂停程序执行的断点。
硬件条件断点是通过在处理器的调试接口上设置断点来实现的,而不是在软件层面上进行。
它可以根据处理器的内部状态、寄存器的值或内存的内容等条件来触发断点。
要使用OD进行硬件条件断点调试,通常需要使用支持调试接口的硬件调试器(例如JTAG或SWD)。
首先,需要将调试器连接到目标系统的调试接口上,并与OD进行通信。
然后,在OD的配置文件中配置断点条件,可以使用GDB的表达式语法来编写条件。
以下是使用OD进行硬件条件断点的一些示例配置:1. 在特定地址上设置断点:```breakpoint {type hardwareenablelocation 0x80001000}```2. 在特定寄存器值上设置断点:```breakpoint {type hardwareenableexpression REGNAME == 0x12345678}```其中,REGNAME是待观察的寄存器名字。
3. 在特定内存值上设置断点:```breakpoint {type hardwareenableexpression *0x80001000 == 0x12345678}```以上是一些示例,具体的配置语法和可用的条件表达式取决于OD的版本和目标处理器的支持程度。
在实际使用中,可以参考OD的文档和相关资料来了解更多详细信息。
致菜鸟: OD里SHIFT+F4条件断点用法篇
发帖人:pjb
时间: 2005-08-24 20:25
原文链接:/showthread.php?threadid=16494
高手就不必看了~,若有错误的地方请指正!
先说一点ALT+L 看记录~
在某条语句上按了SHIFT+F4后出现了个对话框,
1)第一行是"条件": 要输入的肯定是你感兴趣的条件啦,比如说下面的俩句
0041150 push eax
0041151 call [TranslateMessage]
你在0041150处下条件记录中断,假如这时候你要是想知道ESI等不等于0,那就可以设置条件ESI==0 或ESI!=0 反正是关于ESI的条件了而不是只能利用这行的EAX. 当然一样可以在0041150处下断追消息,比如说你想知道按了鼠标移动消息,那么就设置MSG==WM_ MOUSEMOVE 或是MSG==0200(移动的数字代码). 有人该问了,消息记录好象应该在下一行有函数的下断才正确吧? 其实不一定非要在传递消息的那行0041151下断的,但在那行下断的好处是可以记录到函数参数,这在下面会讲到~
"条件"这的书写是按照MASM32汇编的形式书写的,比如== != > <
2)"说明"="表达"
"解码表达式的值"
"说明"就是个注释啦,添不添无所谓了,除非你下的记录中断比较多,这样在记录里能看的明白~
"表达"其实就是我们记录的核心啦,程序在我们第1小条里的"条件"为真的时候,就会记录我们在"表达"里填的内容,比如说ESI==0的时候,我们记录[eax+4]的值
反正是你感兴趣的内容啦,若是想记录消息就添MSG 啦,很多时候我们只添了"条件"而没有添"表达",程序中断后就会显示"未知的函数或标识符!",这就是原因了.
至于下面的"解码表达式的值"你可以随便选了,他不过是把记录后的数据又分析了一下, 比如说我们记录了[eax+4]的值是201 ,那么当你选" 信息代码(WM_XXX)"的时候那么你在记录(ALT+L看记录)里看到的就是被分析成了201 WM_LBUTTONDOWN
当你选"布尔数值",那么记录里数值201后面就会跟个TRUE了,其实就是OD对这个数据按照我们选择的类型又进行了一次分析而已~~
3)暂停程序=> 永不条件满足时永远
这三个选择就是条件为真记录表达的时候程序暂不暂停程序,那就看你调试的需要了~
4)记录表达式的值=> 永不条件满足时永远
呵呵,要是选"永不",那么我们设立记录"表达"还有啥意义啊, 若是选"永远",那么条件似乎不就没意义了,因为记录的时候已经不管条件了,只要运行到这就记录表达.不过好象也可以利用的,自己去想想啦..我不说.
一般都是选"条件满足"啦.
5)记录函数参数=> 永不条件满足时永远
这个要是你下在没函数的那行,那么这行就变灰了~~ 记录函数的参数很有意义啊,直接可以看到很多信息,我们比如说在有函数的那行下条件记录."条件"是EAX==0 "表达"是[EAX+ 4],然后在这选择记录函数参数在"条件满足时";当然你若只想记录运行到此处的函数参数,那么就空着" 条件"和"表达"吧,同时3)和4)的选择也要变为"永不"了...也许你在记录了啥也看不到,因为运行到这行可能EAX总不=0 ,那么好换换EAX>0 ,好象看了到一堆,然后还有P MSG=XXXX Hw=XXXX,这就是运行到这里这个函数的参数啦~~ 我们也可以记录CREA TFILEA 函数,那么就知道都打开什么文件了~~
6) "运行次数":0为无限次
7) "如果程序暂停,发动如下参数到插件中..."
我不会,我就会上面那些,希望高手给补充一下,好让我们这些菜鸟学学~~
注意一点: 我们在OD菜单"查看"=>"窗口"里也可以用老鼠标右键给窗口过程下消息断点,下完后你可以用SHIFF_F4打开那个消息断点,发现它其实就是条件记录断点的一种形式而已~~~
举个例子吧:
比如说一个程序要求注册,点后出现一个注册窗口那么我们就要对点注册按钮下断,看看它之后执行了什么~~
注册窗口如果是对话框,那么肯定要用函数CreatDialoParam或DialogBoxParam 若你对这俩函数都不了解的话,那就去看看书吧...首先用OD里的插件"窗口工具"获得注册按钮的标识(即ID),比如说是0422,记录下来备用啦~,
在OD里对这俩函数下断,然后执行程序,让注册窗口显示就会中断,OD里看堆栈,此函数的第4个参数pDlgProc就是对话框的过程入口了,这里是0041b0b0是入口
去对话框入口处,SHIFT+F4,在"条件"里输入[ESP+8]==0111 && [ESP+C]==0422
"表达"可以空着,暂停程序在"条件满足时"
又该问了,为什么这么写? 请记住: 由于是过程调用,肯定要先向堆栈里压数据的,也就是标准说法:传递参数! 对于对话况过程或窗口过程,执行到入口处的时候堆栈内肯定压入的是M SG消息结构的数据,那么[ESP+8]正好是WM_xxx消息,由于点了按钮我们肯定要抓的是W M_COMMAND消息也就是111啦,这个不明白去看书~ [ESP+C]是Wparam参数,就是窗口的ID号了,这个条件就是当你按下了ID为422的注册按钮的时候中断,接下来你就可以单步看了~~ 当然,你用窗口工具的时候也能看到按钮的子窗口句柄,这时候{ESP+10]就是它的数值了,也一样可以代替{ESP+C]==0422的条件了.其实都一样的,
友人该说了,不会用工具怎么办啊,那就直接在过程入口下SHIFT+F4啦,条件和表达都空着,只选记录函数参数,那么就能得到一堆记录了,找到显示有WM_COMMAND的消息,把他的内容里的ID做为[ESP+C]==的数值,一个个试啦。