123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import os
- import os.path
- def get_smali_method_count(smaliFile, allMethods):
- if not os.path.exists(smaliFile):
- return 0
- f = open(smaliFile, 'r', encoding='UTF-8')
- lines = f.readlines()
- f.close()
- classLine = lines[0]
- classLine.strip()
- if not classLine.startswith('.class'):
- print(f + ' not startswith .class')
- return 0
- className = parse_class(classLine)
- count = 0
- for line in lines:
- line = line.strip()
- method = None
- if line.startswith('.method'):
- method = parse_method_default(className, line)
- elif line.startswith('invoke-'):
- method = parse_method_invoke(line)
- if method is None:
- continue
- if method not in allMethods:
- count = count + 1
- allMethods.append(method)
- else:
- pass
- return count
- def parse_class(line):
- if not line.startswith('.class'):
- print('line parse error. not startswith .class : '+line)
- return None
- blocks = line.split()
- return blocks[len(blocks)-1]
- def parse_method_default(className, line):
- if not line.startswith('.method'):
- print('the line parse error in parse_method_default:'+line)
- return None
- blocks = line.split()
- return className + '->' + blocks[len(blocks)-1]
- def parse_method_invoke(line):
- if not line.startswith('invoke-'):
- print('the line parse error in parse_method_invoke:'+line)
- blocks = line.split()
- return blocks[len(blocks)-1]
|