seg_list = []
for seg in Segments():
seg_list.append(seg)
# logic will be added to remove section that are code later
seg_list.reverse()
for seg in seg_list:
start = SegStart(seg)
end = SegEnd(seg)
while start < end:
gen_xrefs = XrefsTo(start, 0)
for xx in gen_xrefs:
print hex(start), hex(xx.frm)
start += 1
如果我有多个较大的细分,这种方法非常耗时。手动查看数据时,IDA添加
DATA XREF
注释。这些外部参照是通过IDAPython的可访问方式存储的,还是存在另一种更实用的方法来查找段的外部参照? mem_15d:00973000 dd 1C8h dup(0)
mem_15d:00973720 dword_973720 dd 101011Ch, 1000h ; DATA XREF: mem_f08:00970678o
mem_15d:00973728 off_973728 dd offset off_970178 ; DATA XREF: mem_f08:off_970178o
mem_15d:00973728 ; mem_f08:0097017Co
注意:枚举代码中的所有外部参照不是一种选择。
#1 楼
您可以从idautils模块使用Heads函数。因此您的代码将如下所示:
import idautils
seg_list = []
for seg in Segments():
seg_list.append(seg)
# logic will be added to remove section that are code later
seg_list.reverse()
for seg in seg_list:
start = SegStart(seg)
end = SegEnd(seg)
for ea in idautils.Heads(start, end):
gen_xrefs = XrefsTo(ea, 0)
for xx in gen_xrefs:
print hex(ea), hex(xx.frm)
评论
我认为idautils.Heads仅用于代码。感谢你的回答。
– alexanderh
2014年2月12日19:11
可能有对非头地址的外部参照,例如对未定义数据的外部参照,或对结构的外部参照。
–威廉·亨格维尔德(Willem Hengeveld)
2014年3月27日19:30