⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unwcheck.py

📁 linux-2.6.15.6
💻 PY
字号:
#!/usr/bin/env python## Usage: unwcheck.py FILE## This script checks the unwind info of each function in file FILE# and verifies that the sum of the region-lengths matches the total# length of the function.## Based on a shell/awk script originally written by Harish Patil,# which was converted to Perl by Matthew Chapman, which was converted# to Python by David Mosberger.#import osimport reimport sysif len(sys.argv) != 2:    print "Usage: %s FILE" % sys.argv[0]    sys.exit(2)readelf = os.getenv("READELF", "readelf")start_pattern = re.compile("<([^>]*)>: \[0x([0-9a-f]+)-0x([0-9a-f]+)\]")rlen_pattern  = re.compile(".*rlen=([0-9]+)")def check_func (func, slots, rlen_sum):    if slots != rlen_sum:        global num_errors        num_errors += 1        if not func: func = "[%#x-%#x]" % (start, end)        print "ERROR: %s: %lu slots, total region length = %lu" % (func, slots, rlen_sum)    returnnum_funcs = 0num_errors = 0func = Falseslots = 0rlen_sum = 0for line in os.popen("%s -u %s" % (readelf, sys.argv[1])):    m = start_pattern.match(line)    if m:        check_func(func, slots, rlen_sum)        func  = m.group(1)        start = long(m.group(2), 16)        end   = long(m.group(3), 16)        slots = 3 * (end - start) / 16        rlen_sum = 0L        num_funcs += 1    else:        m = rlen_pattern.match(line)        if m:            rlen_sum += long(m.group(1))check_func(func, slots, rlen_sum)if num_errors == 0:    print "No errors detected in %u functions." % num_funcselse:    if num_errors > 1:        err="errors"    else:        err="error"    print "%u %s detected in %u functions." % (num_errors, err, num_funcs)    sys.exit(1)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -