2013-04-17 35 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