0
你好這裏是我的Python腳本片段:的Python閱讀()API異常
#seek to the symtab_offset
elf_fp.seek(self.symtab_sh.sh_offset)
#each entry is 16 bytes, so num_entries = size/16
num_entries = self.symtab_sh.sh_size/16
symbol_list = []
counter = 0
prev=0
for _ in range(num_entries):
counter+=1
s = struct.Struct('IIIccH')
prev = elf_fp.tell()
print str(counter) +" " +str(elf_fp.tell()) +"/" + str(hex(elf_fp.tell())),
buffer = elf_fp.read(16)
print " diff: " +str(elf_fp.tell() - prev)
if len(buffer) !=16:
continue
unpacked_data = s.unpack(buffer)
name = unpacked_data[0]
value = unpacked_data[1]
size = unpacked_data[2]
types = unpacked_data[3]
#print str(size) +"," +str(types.encode('hex'))
#only add none zero size entries
if size and name:
symbol_list.append({"name":name,"value":value, "size": size, "type": types})
這個片斷是從與ELF文件的符號表中讀取16個字節的數據,並試圖以一個結構格式中解壓。 我面臨的問題是,在一個超過100多個符號的大ELF文件中,我可以成功破譯前100個符號的符號信息,但最後幾個我不能。
如果我看看我的日誌,我可以看到讀取api的行爲很奇怪。從文件讀取16個字節後,它應該將文件指針增加16個字節。相反,我可以看到它在某些地方被一些奇怪的偏移遞增。
這裏是日誌片段:
107 36056/0x8cd8L diff: 16
108 36072/0x8ce8L diff: 16
109 36088/0x8cf8L diff: 16
110 36104/0x8d08L diff: 2864
111 38968/0x9838L diff: 16
你可以看到,第110符號的讀取造成大約2864字節的跳躍。 任何想法爲什麼閱讀行爲這很奇怪?有沒有知道python讀取api的問題?
如何創建'elf_fp'?你是否將''r''或''rb''傳遞給'open()'調用?後者是此用途所必需的。 –
謝謝老兄。這是問題所在。我在「r」模式下打開它。 –
不客氣。我已經創建了一個答案,如果你關心接受它。 –