第十七章:运行时特性-sys:系统特定配置-跟踪程序运行情况-监视栈

17.2.7.3 监视栈
使用hook的另一方法是跟踪正则调用哪些函数,以及它们的返回值是什么。为了监视返回值,可以监视return事件。

#!usr/bin/env python3
# encoding: utf-8

import sys

def trace_calls_and_returns(frame,event,arg):
    co = frame.f_code
    func_name = co.co_name
    if func_name == 'write':
        # Ignore write() calls from printing.
        return
    line_no = frame.f_lineno
    filename = co.co_filename
    if event == 'call':
        print('* Call to {} on line {} of {}'.format(
            func_name,line_no,filename))
        return trace_calls_and_returns
    elif event == 'return':
        print('* {} => {}'.format(
            func_name,arg))
    return


def b():
    print('inside b()')
    return 'response_from_b'


def a():
    print('inside a()')
    val = b()
    return val * 2


sys.settrace(trace_calls_and_returns)
a()

局部跟踪函数用于监视返回事件,这说明调用一个函数时trace_calls_and_returns()需要返回自身的一个引用,从而能监视返回值。
第十七章:运行时特性-sys:系统特定配置-跟踪程序运行情况-监视栈

上一篇:Android HeadSetClient端通话的传递


下一篇:你知道Uboot中的net是怎样的?