OD调试器的"单步跳进"是什么意思?怎么实现?

OD调试器的"单步跳进"是什么意思?怎么实现?,第1张

我这儿的翻译是“单步步入”和“单步步过”,对应F7和F8两个快捷键。你的那个“跳进”大概是F7吧?
这两个的区别就是F7遇到call命令会跟进去,然后在里面一行一行的执行到retn返回;F8则自动把这个过程调用完返回,执行下一行语句。

(⊙o⊙)… F8是直接执行CALL的内容F7是进入CALL里看这个CALL 的具体代码 用C来举例子就是F8就是直接执行完一个函数F7是进到这个函数里面等到这个函数执行完自然就会返回了啊

这里是全部的详细类容 你自己看看
快捷键
无论当前的OllyDbg窗口是什么,这些快捷键均有效:
Ctrl+F2 - 重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[history
list]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。
译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。
Alt+F2 - 关闭,即关闭被调试程序。如果程序仍在运行,会d出一个提示信息,询问您是否要关闭程序。
F3 - d出“打开32位EXE文件”对话框[Open 32-bit EXE file],您可以选择可执行文件,并可以输入运行参数。
Alt+F5 -
让OllyDbg总在最前面。如果被调试程序在某个断点处发生中断,而这时调试程序d出一个总在最前面的窗口(一般为模式消息或模式对话框[modal
message
or dialog]),它可能会遮住OllyDbg的一部分,但是我们又不能移动最小化这个窗口。激活OllyDbg(比如按任务栏上的标签)并按
Alt+F5,OllyDbg将设置成总在最前面,会反过来遮住刚才那个窗口。如果您再按一下Alt+F5,OllyDbg会恢复到正常状态。
OllyDbg是否处于总在最前面状态,将会保存,在下一次调试时依然有效。当前是否处于总在最前面状态,会显示在状态栏中。
F7 -
单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。如果当前命令是是含有REP前缀,则只执行一次重复 *** 作。
Shift+F7 -
与F7相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步入被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F7 -
自动步入,在所有的函数调用中一条一条地执行命令(就像您按住F7键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步入过程都会停止。每次单步步入,OllyDbg都会更新所有的窗口。所以为了提高自动步入的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步入。
F8 -
单步步过到下一条命令。如果当前命令是一个函数,则一次执行完这个函数(除非这个函数内部包含断点,或发生了异常)。如果当前命令是含有REP前缀,则会执行完重复 *** 作,并停在下一条命令上。
Shift+F8 -
与F8相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步过被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F8 -
自动步过,一条一条的执行命令,但并不进入函数调用内部(就像您按住F8键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步过过程都会停止。每次单步步过,OllyDbg都会更新所有的窗口。所以为了提高自动步过的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步过。
F9 - 让程序继续执行。
Shift+F9 -
与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F9 -
执行直到返回,跟踪程序直到遇到返回,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条命令执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
Alt+F9 -
执行直到返回到用户代码段,跟踪程序直到指令所属于的模块不在系统目录中,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
Ctrl+F11
-Run跟踪步入,一条一条执行命令,进入每个子函数调用,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。
F12 - 停止程序执行,同时暂停被调试程序的所有线程。请不要手动恢复线程运行,最好使用继续执行快捷键或菜单选项(像 F9)。
Ctrl+F12 - Run跟踪
步过,一条一条执行命令,但是不进入子函数调用,,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。
Esc - 如果当前处于自动运行或跟踪状态,则停止自动运行或跟踪;如果CPU显示的是跟踪数据,则显示真实数据。
Alt+B - 显示断点窗口。在这个窗口中,您可以编辑、删除、或跟进到断点处。
Alt+C - 显示CPU窗口。
Alt+E - 显示模块列表[list of modules]。
Alt+K - 显示调用栈[Call stack]窗口。
Alt+L - 显示日志窗口。
Alt+M - 显示内存窗口。
Alt+O - 显示选项对话框[Options dialog]
Ctrl+P - 显示补丁窗口。
Ctrl+T - 打开 暂停 Run跟踪 对话框
Alt+X - 关闭 OllyDbg。
大多数窗口都支持以下的键盘命令:
Alt+F3 - 关闭当前窗口。
c&vWmLSGE
Ctrl+F4 - 关闭当前窗口。
F5 - 最大化当前窗口或将当前窗口大小改为正常化。
F6 - 切换到下一个窗口。
Shift+F6 - 切换到前一个窗口。
F10 - 打开与当前窗口或面板相关的快捷菜单。
左方向键 - 显示窗口左方一个字节宽度的内容。
Ctrl+左方向键 - 显示窗口左方一栏的内容。
右方向键 - 显示窗口右方一个字节宽度的内容
Ctrl+右方向键 - 显示窗口右方一栏的内容
反汇编窗口中的快捷键[Disassembler shortcuts]
当CPU窗口中的反汇编面板[Disassembler pane]处于激活状态时,您可以使用以下快捷键:
回车键 - 将选中的命令添加到命令历史[command
history]中,如果当前命令是一个跳转、函数或者是转换表的一个部分,则进入到目的地址。
退格键 - 移除选中部分的自动分析信息。如果分析器将代码误识别为数据,这个快捷键就非常有用。请参考解码提示[decoding hints]
Alt+退格键 - 撤消所选部分的修改,以备份数据的相应内容替换所选部分。仅当备份数据存在且与所选部分不同时可用。
Ctrl+F1 -如果API帮助文件已经选择,将打开与首个选择行内的符号名相关联的帮助主题。
F2 -在首个选择的命令上开关INT3 断点[Breakpoint],也可以双击该行第二列。
Shift+F2 -在首个选择命令设置条件断点,参见忽略Kernel32中内存访问异常[Ignore memory access violations
in Kernel32]。
F4
-执行到所选行,在首个选择的命令上设置一次性断点,然后继续执行调试程序,直到OllyDbg捕获到异常或者停止在该断点上。在程序执行到该命令之前,该一次性断点一直有效。如有必要,可在断点窗口[Breakpoints
window]中删除它。
Shift+F4 -设置记录断点(一种条件断点,当条件满足时一些表达式的值会记录下来), 详情参见断点[Breakpoint]。
Ctrl+F5 -打开与首个选择的命令相对应的源文件。
Alt+F7 -转到上一个找到的参考。
Alt+F8 -转到下一个找到参考。
Ctrl+A -分析当前模块的代码段。
Ctrl+B - 开始二进制搜索。
Ctrl+C -复制所选内容到剪贴板。复制时会简单地按列宽截断不可见内容,如果希望排除不需要的列,可把这些列的宽度调整到最小。
Ctrl+E -以二进制(十六进制)格式编辑所选内容。
Ctrl+F -开始命令搜索。
Ctrl+G -转到某地址。该命令将d出输入地址或表达式的窗口。该命令不会修改 EIP。
Ctrl+J -列出所有的涉及到该位置的调用和跳转,在您用这个功能之前,您必须使用分析代码功能。
Ctrl+K - 查看与当前函数相关的调用树[Call tree]。在您用这个功能之前,您必须使用分析代码功能。
Ctrl+L - 搜索下一个,重复上一次的搜索内容。
Ctrl+N - 打开当前模块的名称(标签)列表。
Ctrl+O -
扫描object文件。扫描Object文件。该命令会显示扫描Object文件对话框,您可以在该对话框中选择Object文件或者lib文件,并扫描这个文件,试图找到在实际代码段中用到的目标模块。
Ctrl+R
-搜索所选命令的参考。该命令扫描激活模块的全部可执行代码,以找到涉及到首个选中的命令的全部相关参考(包括:常量、跳转及调用),您可以在参考中使用快捷键
Alt+F7 和 Alt+F8来浏览这些参考。为便于您使用,被参考的命令也包含在该列表中。
Ctrl+S -命令搜索。该命令显示命令查找[Find command]对话框供您输入汇编命令,并从当前命令开始搜索。
星号[Asterisk]() -转到原始位置(激活线程的EIP处)。
Ctrl+星号() - 指定新的起始位置,设置当前所选线程的EIP为首个选择字节的地址。您可以在选择EIP并撤消该 *** 作。
加号[Plus](+) -如果run跟踪[run trace] 没有激活,则根据命令历史[command
history]跳到下一条运行过命令的地方;否则跳到Run跟踪的下一个记录。
Ctrl+加号 - 跳到前一个函数开始处。(注意只是跳到,并不执行)
减号[Minus](-) - 如果run跟踪[run trace] 没有激活,则根据命令历史[command
history]跳到前一条运行过命令的地方;否则跳到Run跟踪的前一个记录。
Ctrl+减号 - 跳到下一个函数开始处。(注意只是跳到,并不执行)
空格[Space] -
修改命令。您可在显示对话框中以汇编语言修改实际指令或输入新指令,这些指令将替换实际代码,您也可以在想要修改的指令处双击鼠标。
冒号[Colon]( - 添加标签。显示添加标签窗口[Add label]或修改标签窗口[Change
label],您可在此输入与首个选择的命令中的第一个字节相关联的标签(符号名)。注意,在多种编程语言中,冒号可以是标签的一部分。
分号[Semicolon](;) - 添加注释[comment]。显示添加注释窗口[Add label]或修改注释窗口[Change
label],您可在此输入与首条所选命令的第一个字节相关联的注释(注释串会显示在最后一列中)。注意,多种汇编语言使用分号作为注释开始。您也可以在注释列双击需要注释的命令行。
命令行插件支持的命令
CALC
判断表达式
WATCH
添加监视表达式
AT
在指定地址进行反汇编
FOLLOW
跟随命令
ORIG
反汇编于 EIP
DUMP
在指定地址进行转存
DA
转存为反汇编代码
DB
使用十六进制字节格式转存
DC
使用 ASCII 格式转存
DD
转存在堆栈格式
DU
转存在 UNICODE 格式
DW
使用十六进制字词格式转存
STK
AS
(AS + 地址 + 字符串)
在指定地址进行汇编
BP
进行条件中断(有条件的断点)
BPX
中断在全部调用 (Call)
BPD
清除全部调用中的断点
BC
清除断点
MR
内存断点于访问时
MW
内存断点于写入时
MD
清除内存断点
HR
访问时进行硬件中断
HW
写入时进行硬件中断
HE
执行时进行硬件中断
HD
清除硬件断点
STOP
停止运行程序调试
PAUSE
暂停执行程序调试
RUN
运行程序进行调试
GE
运行和通过例外
SI
单步进入 Call 中
SO
步过 Call
TI
跟踪进入直到地址
TO
跟踪步过直到地址
TC
跟踪进入直到满足条件
TOC
跟踪步过直到满足条件
TR
运行直到返回
TU
运行直到用户代码
LOG
查看记录窗口
MOD
查看模块窗口
MEM
查看内存窗口
CPU
查看 CPU 窗口
CS
查看 Call 堆栈
BRK
查看断点窗口
OPT
打开选项设置窗口
EXIT
退出 OllyDbg
QUIT
退出 OllyDbg
OPEN
打开一个可执行文件
CLOSE
关闭可执行文件
RST
重新运行当前程序
HELP
查看 API 函数的帮助

在A列名称,身份z号码在B列
你想输入一个名称第二,自动ID卡。方法是
B2输入
= IF(A2 =“”,“”,(COUNTIF(A $ 1:A1,A2),VLOOKUP(A2,A $ 1:B1,2,0),“”))
进入
重新选择B2
将鼠标移动到B2单元格的右下角,当鼠标指针变成+
按下左边的按钮,不要松手,下拉鼠标。

应该只一个返回,如果你看到周围有很多返回,其中只有一个有用,你可以用F7或F8找到你正确的返回,最后到retn再按F7,就返回到调用这个call的上一次,当前代码的上一句就是call XXXX


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12643824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存