-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathcall_chain.py
26 lines (23 loc) · 1.01 KB
/
call_chain.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pin, sys
def print_chain(ins_object):
if pin.INS_IsDirectCall(ins_object):
name = pin.RTN_FindNameByAddress(int(pin.INS_DirectBranchOrCallTargetAddress(ins_object)))
callee_name = pin.RTN_FindNameByAddress(int(pin.INS_Address(ins_object)))
if name and name[0] != "." and callee_name and callee_name[0] != "." and name[0] != "_" and callee_name[0] != "_":
print "call", callee_name, "->", name
return
if pin.INS_IsMov(ins_object):
if pin.INS_IsMemoryWrite(ins_object):
print pin.INS_Disassemble(ins_object)
print pin.INS_MemoryWriteSize(ins_object)
if pin.INS_IsNop(ins_object):
print pin.INS_Disassemble(ins_object)
return
if pin.INS_IsRet(ins_object):
print pin.INS_Disassemble(ins_object)
return
if pin.INS_IsMemoryWrite(ins_object):
print pin.INS_Disassemble(ins_object)
print pin.INS_MemoryWriteSize(ins_object)
return
pin.INS_AddInstrumentFunction(print_chain)