-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocess.py
More file actions
96 lines (80 loc) · 2.55 KB
/
process.py
File metadata and controls
96 lines (80 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#-*- coding: utf-8 -*-
import sys
import os
import struct
from memarea import memarea
from page import page
class process:
def _parse_line(self, line, aid):
line = ' '.join(line.split())
fields = line.strip(" +").split(" ")
base = fields[0].split("-")[0]
end = fields[0].split("-")[1]
perm = fields[1]
offset = fields[2]
major = fields[3].split(":")[0]
minor = fields[3].split(":")[1]
inode = fields[4]
if len(fields) > 5:
name = fields[5]
else:
name = ""
new = memarea(aid, base, end, perm, inode, name, offset=offset,\
major=major, minor=minor)
return new
def parse_maps(self, pid):
memmap = []
with open("/proc/"+pid+"/maps", 'r') as file:
aid = 0
for line in file:
line = line.rstrip()
area = self._parse_line(line, aid)
memmap.append(area)
if area == "[heap]":
if self.heap == None:
self.heap = area
else:
print "Error: More than one heap?"
if area == "[stack]":
if self.stack == None:
self.stack = area
else:
print "Error: More than one stack?"
aid = aid + 1
return memmap
def find_memarea(self, address, length):
for i in range(len(self.memareas)):
if self.memareas[i].is_contained(address) == True:
return self.memareas[i]
return None
def get_md5(self):
return self.maps_md5
def set_memareas(self, newmap):
self.memareas = newmap
def get_memareas(self):
return self.memareas
def get_pagemap(self):
return self.pagemap
def set_md5(self, md5):
self.maps_md5 = md5
def get_stack(self):
return self.stack
def get_heap(self):
return self.heap
def get_pid(self):
return self.pid
def get_name(self):
return self.name
def extract_name(self, pid):
with open("/proc/"+pid+"/comm", 'r') as file:
return file.read().rstrip()
def display(self):
print "pid: {} - name: {} - areas: {}".format(self.pid,
self.name, len(self.memareas))
def __init__(self, pid):
self.pid = pid
self.name = self.extract_name(pid)
self.memareas = self.parse_maps(pid);
self.heap = None
self.stack = None
self.maps_md5 = 0