📄 unwcheck.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 + -