2013-04-17 78 views
1

我有以下腳本:的Python閱讀Linux進程的內存和轉儲到文件

import sys, os 

pid = sys.argv[1] 
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]+)-([0-9A-Fa-f]+) ([-r])', 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(pid+".bin", "wb") 
     mem_dump.write(str(chunk,)) 
     mem_dump.close() 
maps_file.close() 
mem_file.close() 

所有workds以及(傾銷進程的內存),但迄今爲止我無法保存數據到文件。我究竟做錯了什麼?

+0

會發生什麼?你有錯誤嗎? – codebox

+0

沒有錯誤,但沒有寫入任何文件: - | – bsteo

回答

1

難道是文件正在寫入你不期望的地方(看起來他們將被寫入當前目錄)?

+0

是的,你說得對,我希望寫在當前的目錄中,但他們沒有寫完整的路徑,謝謝! – bsteo

+0

但仍然是一個問題,文件只寫了一個塊而不是所有的數據,爲什麼?已解決:mem_dump = open(「/ tmp /%s.bin」%pid,「ab」) – bsteo

+0

@xtmtrx您也可以將文件保留爲完整的for循環。 – Wessie