unsuportedSemantics[mnemonic] += 1 else: print(instruction) unsuportedSemantics.update({mnemonic: 1}) return def cafter(instruction): Triton.reset() return def cfini(): l = list(unsuportedSemantics.items()) l.sort(key=itemgetter(1), reverse=True) print('=============================================================') print('Unsuported Semantics') print('=============================================================') for i in l: print('%s: %d' %(i[0].lower(), i[1])) print('=============================================================') return if __name__ == '__main__': startAnalysisFromEntry() insertCall(cbefore, INSERT_POINT.BEFORE) insertCall(cafter, INSERT_POINT.AFTER) insertCall(cfini, INSERT_POINT.FINI) runProgram()
else: print instruction unsuportedSemantics.update({mnemonic: 1}) return def cafter(instruction): Triton.resetEngines() return def cfini(): l = unsuportedSemantics.items() l.sort(key=itemgetter(1), reverse=True) print '=============================================================' print 'Unsuported Semantics' print '=============================================================' for i in l: print '%s: %d' %(i[0].lower(), i[1]) print '=============================================================' return if __name__ == '__main__': Triton.setArchitecture(ARCH.X86_64) startAnalysisFromEntry() insertCall(cbefore, INSERT_POINT.BEFORE) insertCall(cafter, INSERT_POINT.AFTER) insertCall(cfini, INSERT_POINT.FINI) runProgram()
if nativeAddress != astAddress: good = False print("[%sKO%s] %#x: %s (%smemory error%s)" % (RED, ENDC, instruction.getAddress(), instruction.getDisassembly(), RED, ENDC)) print(" Native address : %016x" % (nativeAddress)) print(" Symbolic address : %016x" % (astAddress)) if len(instruction.getSymbolicExpressions()) == 0: print("[%s??%s] %#x: %s" % (BLUE, ENDC, instruction.getAddress(), instruction.getDisassembly())) return if good: print("[%sOK%s] %#x: %s" % (GREEN, ENDC, instruction.getAddress(), instruction.getDisassembly())) return else: #time.sleep(2) sys.exit(-1) return if __name__ == '__main__': Pintool.startAnalysisFromEntry() Pintool.startAnalysisFromSymbol('check') Pintool.insertCall(cafter, Pintool.INSERT_POINT.AFTER) Pintool.insertCall(sbefore, Pintool.INSERT_POINT.BEFORE_SYMPROC) Pintool.runProgram()
for op in instruction.getOperands(): if op.getType() == OPERAND.MEM: nativeAddress = op.getAddress() astAddress = op.getLeaAst().evaluate() if nativeAddress != astAddress: good = False print "[%sKO%s] %#x: %s (%smemory error%s)" %(RED, ENDC, instruction.getAddress(), instruction.getDisassembly(), RED, ENDC) print " Native address : %016x" %(nativeAddress) print " Symbolic address : %016x" %(astAddress) if len(instruction.getSymbolicExpressions()) == 0: print "[%s??%s] %#x: %s" %(BLUE, ENDC, instruction.getAddress(), instruction.getDisassembly()) return if good: print "[%sOK%s] %#x: %s" %(GREEN, ENDC, instruction.getAddress(), instruction.getDisassembly()) return else: #time.sleep(2) pass return if __name__ == '__main__': Pintool.startAnalysisFromEntry() #Pintool.startAnalysisFromSymbol('check') Pintool.insertCall(cafter, Pintool.INSERT_POINT.AFTER) Pintool.insertCall(sbefore, Pintool.INSERT_POINT.BEFORE_SYMPROC) Pintool.runProgram()