1import sys 2 3if len(sys.argv)!=2: 4 print "Usage:" 5 print " First run 'dumpbin /exports your_file.dll/.lib > your_file_dumpbin.txt'" 6 print " Then run '%s your_file_dumpbin.txt > your_file.sdb.txt'" % (sys.argv[0],) 7 print " Note: this script will strip away function signatures, so overloaded C++ methods will all have the same name" 8 sys.exit(1) 9 10d = open(sys.argv[1]).read().split("\n") 11for l in d: 12 ls = l.split(None, 1) 13 if len(ls)!=2: 14 continue 15 ordinal = ls[0] 16 desc = ls[1] 17 desc = desc.split("(", 1) 18 if len(desc) <= 1: 19 sys.stderr.write("Warning, skipping line: " + l + "\n") 20 continue 21 rawname = desc[0].strip() 22 desc = desc[1].strip() 23 if desc[-1] != ')': 24 sys.stderr.write("Warning, skipping line: " + l + "\n") 25 continue 26 fulldesc = desc[:-1].strip() 27 desc = fulldesc 28 if desc.endswith('const'): 29 desc = desc[:-len('const')] 30 desc = desc.split('(', 1) 31 pre = desc[0].strip() 32 post = "" 33 if len(desc)>1: 34 desc = desc[1] 35 desc = desc.split(')') 36 if len(desc)>1: 37 post = desc[-1].strip() 38 if post != "": 39 sys.stderr.write("Warning, skipping line: " + l + "\n") 40 continue 41 desc = pre 42 i = len(desc) - 1 43 deep = 0 44 while i >= 0: 45 if desc[i] == ">": 46 deep += 1 47 if desc[i] == "<": 48 deep -= 1 49 if desc[i] != " ": 50 i -= 1 51 continue 52 if deep > 0: 53 i -= 1 54 continue 55 break 56 desc = desc[i+1:] 57 print ordinal+"="+desc 58