我有這個片段,它在Linux中讀取進程內存並搜索字符串,在某些發行版上工作正常,但在其他版本上只是出現此錯誤:Python Linux讀取進程內存 - int太大,無法轉換爲C long
maps_file = open("/proc/%s/maps"%pid, 'r')
mem_file = open("/proc/%s/mem"%pid, 'r')
for line in maps_file.readlines(): # for each mapped region
m = re.match(r'([0-9A-Fa-f]+)', line)
if m.group(3) == 'r': # if this is a readable region
start = int(m.group(1), 16)
end = int(m.group(2), 16)
mem_file.seek(start) # seek to region start
chunk = mem_file.read(end - start) # read region contents
#print chunk, # dump contents to standard output
mem_dump = open(working_dir+"/%s.bin"%pid, "ab")
mem_dump.write(chunk,)
mem_dump.close()
maps_file.close()
mem_file.close()
錯誤:
scan process: 491
Traceback (most recent call last):
File "./dump.py", line 106, in <module>
MainDump(pid)
File "./dump.py", line 79, in MainDump
mem_file.seek(start) # seek to region start
OverflowError: Python int too large to convert to C long
問題行是:
start = int(m.group(1), 16)
和
mem_file.seek(start)
應該聲明爲float
?任何想法?
也試過long()
,結果和錯誤都一樣。
編輯:我忘了說的是,我在「x64」系統上得到的錯誤。
您正在使用64位操作系統和或Python的64位編譯?看起來起始地址超出了C實現可以處理的範圍,但是這意味着它會在64位機器上編譯爲32位應用程序? – 2013-05-12 10:20:21
發行版官方是爲64位編譯的。 – bsteo 2013-05-12 10:24:32
如果你不確定,你可以這樣做:'import ctypes;打印(ctypes.sizeof(ctypes.c_long))'。如果這說'4'而不是'8',那就是你的問題。 – abarnert 2013-05-12 10:24:34