如何使源码级进行逐步执行
1、首先把需要编写的函数,无论简单还是复杂,加入到调试器里面,调试器的里面有thread plan概念封装了所有的单步信息,会有一些比较复杂的逻辑去决定断点的位置,然后利用函数去判断单步操作是否成功。
2、然后输入函数的返回地址,在返回地址的地方设一个断点继续执行,返回地址就保存在栈帧开始的后8个字节中,读取栈指针然后在内存相对应的地址读取值,输入帮助函数remove_breakpoint。
3、接着跳入step_in,利用一个简单的算法是继续逐步执行指令直到新的一行,真正的调试器一般会检查当前正在执行什么指令然后计算出所有可能的分支目标在所有分支目标中设置断点。
4、然后输入libelfin中的函数at_low_pc和at_high_pc,它们能指定函数DWARF信息条目的最小和最大程序计数器值,设置所有断点,循环遍历行表条目直到找到一个不在函数范围内,把它们保存进一个地方。
5、接着确保它不是当前所在的行,而且在这个位置还没有设置任何断点,跳出step_out在函数的返回地址处设置一个断点。
6、最后继续执行直到命中其中一个断点,然后移除所有设置的临时断点,在main地址处设置一个断点,然后在整个程序中跳入、跳过、跳出函数。
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。