OllyDbg完全教程 复制到剪切板[Copy to clipboard] 调用栈[Call stack] 调用树[Call tree]

转载 2006年06月10日 08:57:00

十四,复制到剪切板[Copy to clipboard]

整行[Whole line] -全部行--以多行文本的形式并带注释将所选记录复制到剪切板。如果在复制时想排除某个栏目,可以将该栏的宽度置为最小(栏目的残留部分将变灰)。

整个表格[Whole table] - 整个表格--以多行文本的形式将整个内存映象复制到剪切板,该文本的第一行包含窗口标题(“内存映射[Memory map]”),第二行是栏目标题,所有后继行是内存数据记录。复制将保持栏目的宽度。如果在复制时想排除某些栏目,可以将该栏的宽度置为最小(栏目的残留部分将变灰)。

十五,调用栈[Call stack]

调用栈窗口(快捷键:Alt+K)根据选定线程的栈,尝试反向跟踪函数调用顺序并将其显示出来,同时包含被调用函数的已知的或隐含的参数。如果调用函数创建了标准的堆栈框架(PUSH EBP; MOV EBP,ESP),则这个任务非常容易完成。现代的优化编译器并不会为栈框架而操心,所以OllyDbg另辟蹊径,采用了一个变通的办法。例如,跟踪代码到下一个返回处,并计算其中全部的入栈、出栈,及 ESP 的修改。如果不成功,则尝试另外一种办法,这个办法风险更大,速度也更慢:移动栈,搜索所有可能的返回地址,并检查这个地址是否被先前的已分析的命令调用。如果还不行,则会采用启发式搜索。栈移动[Stack Walk]可能会非常慢。OllyDbg 仅在调用栈窗口打开时才会使用。

调用栈窗口包含5个栏目:地址[Address]、栈[Stack]、过程[Procedure],调用来自[Called from],框架[Frame]。地址[Adress]栏包含栈地址,栈[Stack]
栏显示了相应的返回地址或参数值。

函数[Procedure](或 函数/参数[Procedure / arguments])显示了被调用函数的地址,在某些情况下,OllyDbg并不能保证该地址是正确的并会添加如下标记之一:

? 找到的入口点不可靠
可能[Maybe] OllyDbg无法找到精确的入口点,报告的地址是用启发式算法猜测的。
包含[Includes] OllyDbg无法找到入口点,仅知道该函数包含显示的地址
通过按例标题栏上的按钮或从菜单中选择“隐藏/显示参数[Hide/Show arguments]”,可以在显示或隐藏函数的参数之间切换。

调用来自[Called from]用于显示调用该函数的命令地址。最后一栏是框架[Frame]这一栏默认是隐藏的,如果框架指针的值(寄存器EBP)已知的话,则该栏用于显示这个值。

当调用函数经过分析[analyzed].后,栈移动会更可靠并且迅速。

十六,调用树[Call tree]

调用树(快捷键:在反汇编窗口中Ctrl+K)利用分析[Analysis]的结果来找出指定函数过程直接或间接调用的函数列表,同时列出指定函数过程被调用的地址。为了避免由此可能造成的副作用。调用树会判断选定函数是否明确地是递归的。“明确地”意味着它不会跟踪目标未知的调用,比如CALL EAX。如果函数过程中有未知调用,调用树将会添加标记“未知目标”。

某些函数调用将会添加如下注释之一:


叶子[Leaf] 不调用其他函数
纯函数[Pure] 不调用函数,不会产生副作用
单返回[RETN] 只有一个RETN 命令
系统[Sys] 系统动态链接库中的函数。系统动态链接库定义为保存在系统目录下的动态链接库。
如果想在调用树上移动,可以双击“被调用[Called from]”或“调用/直接调用[Calls/Calls directly]”两栏中的地址。调用树窗口保存了移动记录(快捷键“-”和“+”)。

如果被调试的程序包含几个模块,推荐您分析所有模块。Call tree 不会试图处理系统函数。


手把手教你玩转GDB(四)——–函数调用栈(call stack)探密

文是GDB系列的第四篇,感兴趣的朋友可以阅读本系列的前三篇。本文的主要内容是讲如何用GDB来查看C/C++程序中函数调用栈(call stack)的相关信息,通过介绍一些相关的命令及其用法,让读者朋友...
  • Stephan14
  • Stephan14
  • 2015年02月07日 10:30
  • 1669

【c++】调试技巧之调用堆栈 - Call stack

转自:http://blog.csdn.net/zhg598242449/article/details/7591123 简单介绍   调试是程序开发者必备技巧。如果不会调试,自己写的程序一旦出问...
  • qq_15947787
  • qq_15947787
  • 2016年11月23日 20:52
  • 2093

Call Stack技巧(调用堆栈调试)

1、堆栈调试的原理      调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的?2、堆栈调试的技巧      在“Call Stack”对话框中显示了一个调用系列,最上面的是当前函数,往下依...
  • markman101
  • markman101
  • 2010年09月01日 10:52
  • 5997

Xcode debug时如何查看崩溃堆栈:First throw call stack不打印方法名

在Xcode调试程序时,程序出现bug崩溃后,偏偏在控制台显示的崩溃堆栈看不到具体的函数调用信息以及函数行号等,这怎么办?...
  • skylin19840101
  • skylin19840101
  • 2017年02月20日 18:09
  • 2941

gdb 调用栈 (call stack)

分享一篇不错的文章讲述调用栈; 如果得到调用栈 http://www.yosefk.com/blog/getting-the-call-stack-without-a-frame-pointer.h...
  • sylin
  • sylin
  • 2012年06月19日 15:23
  • 3079

调用栈 (Call Stack)

调用栈的英文叫做call stack,从其英文书名来看,知道它本身就是一个栈,故而它满足栈的先入后出的特性。 wiki上有篇文章讲述call stack。 关于栈的溢出(stack...
  • zero_lee
  • zero_lee
  • 2012年08月14日 13:26
  • 2246

程序调试的时候利用Call Stack窗口查看函数调用信息

利用Call Stack窗口查看函数调用信息 Call Stack窗口能够查看当前方法的调用信息。例如方法的参数信息,调用当前方法的参数等。实例实现的是在按钮的单击事件方法内,调用自定义方法,在...
  • wordwarwordwar
  • wordwarwordwar
  • 2014年10月15日 16:21
  • 1563

跟踪 API 调用--OllyDbg

  在API 调用上设置断点可以利用该功能做到1.  跟踪对指定 API 的调用 ( 当在被调试程序中调用该 API时断点即被触发, )2.  查看程序用到了哪些 API 函数,了解程序的大体的功能 ...
  • Blue_Dream_
  • Blue_Dream_
  • 2007年11月23日 09:01
  • 3922

如何复制文件到剪贴板

闲话少说,直接上代码。 BOOL CopyFilesToClipboard( std::vector const & vecFiles ) { RETURN_IF_FALSE...
  • winterain
  • winterain
  • 2012年07月02日 20:06
  • 3104

Easyui treegrid idField字段引起的错误:maximum call stack size exceeded

使用过easyui的大大们帮忙指点一二、treegrid中的idField字段引发的血案
  • u011225099
  • u011225099
  • 2016年10月17日 17:29
  • 474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OllyDbg完全教程 复制到剪切板[Copy to clipboard] 调用栈[Call stack] 调用树[Call tree]
举报原因:
原因补充:

(最多只允许输入30个字)