Package Libs ::
Module graphclass
|
|
1
2 """
3 Immunity Debugger Graph Lib
4
5 (c) Immunity, Inc. 2004-2007
6
7
8 U{Immunity Inc.<http://www.immunityinc.com>} Graph API
9
10
11 """
12
13 __version__ = '1.1'
14
15 import debugger
16
17
18
19 ImmDrawColors = {"Black":0,"Maroon":128,"Green":32768,"Olive":32896,"Navy":8388608,"Purple":8388736,"Teal":8421376,\
20 "Gray":8421504,"Silver":12632256,"Red":255,"Lime":65280,"Yellow":65535,"Blue":16711680,"Fuchsia":16711935,\
21 "Aqua":16776960,"LightGray":12632256,"DarkGray":8421504,"White":16777215,"MoneyGreen":12639424,\
22 "SkyBlue":15780518,"Cream":15793151,"MedGray":10789024,"red":255,"darkgreen":32768}
23
24
25
28 self.vertices=[]
29 self.edges=[]
30 self.nvertices=0
31 self.nedges=0
32 self.handler=0
33 self.height=0
34 self.width=0
35
36
39
41 self.vertices=vertices
42
45
47 """edges[0] = source
48 edges[1] = target
49 edges[3] = type
50 type can be one of:
51 Direct = 0
52 True = 1
53 False = 2"""
54 self.edges.append(edges)
55
58
60 self.nedges=len(self.edges)
61 return self.nedges
62
64 self.nvertices=len(self.vertices)
65 return self.nvertices
66
68 return debugger.splash_time(self.handler,self.height,self.width)
69
70
72 fy2=fx2=fx=fy=0
73 for vertex in vertices:
74 (x,y,x2,y2)=vertex.getCoords()
75 if y2>fy2:
76 fy2=y2
77 if x2 > fx2:
78 fx2=x2
79 if y < fy:
80 fy=y
81 if x < fx:
82 fx=x
83 self.height=fy2 + 200
84 self.width = fx2 + 400 + abs(fx)
85 vertices[0].setStartCoords(self.height,self.width)
86
88 return (self.height,self.width)
89
90
91
92
93
94
95
96
97
98
101 self.inadj=[]
102 self.outadj=[]
103 self.name=""
104 self.label=""
105 self.buf=[]
106
107 self.absy=0
108 self.absx=0
109 self.handler=handler
110 self.x1=0
111 self.y1=0
112 self.x2=0
113 self.y2=0
114 self.rely=0
115 self.relx=0
116 self.color="Black"
117 self.texth=0
118 self.textw=0
119 self.drawn=False
120 self.placed=False
121 self.start_x=300
122 self.start_y=10
123
125 return cmp(self.y2, other.y2)
126
127
130
132 """type can be one of:
133 Direct = 0
134 True = 1
135 False = 2
136 """
137 self.outadj.append((edge,type))
138
141
144
145
148
151
154
157
160
163
165 self.relx=x
166 self.rely=y
167
169 return (self.relx,self.rely)
170
173
175 """returns True if vertex was already placed into the plane"""
176 return self.placed
177
179 theight=0
180 for line in text:
181 (twidth,theight)=debugger.get_text_size(self.handler,line)
182 if twidth > self.absx:
183 self.absx=twidth
184 self.absy=self.absy+theight
185 self.absy=self.absy+4
186 self.absx=self.absx+10
187
188
190 return (self.absx,self.absy)
191
194
197
199 self.x2 = self.getWidth() + self.relx
200 self.y2 = self.getHeight() + self.rely
201 return (self.relx,self.rely,self.x2,self.y2)
202
205
208
211
214
216 self.x2 = self.getWidth() + self.relx
217 self.y2 = self.getHeight() + self.rely
218 return (self.relx,self.rely,self.x2,self.y2)
219
222
225
227 self.rely=self.rely - value
228 return
229
231 self.rely=self.rely + value
232 return
233
235 self.relx = self.relx + value
236 return
237
239 self.relx = self.relx - value
240 return
241
242 - def placeVertex(self,x,y,text,textcolor,rectcolor,start):
243 theight=0
244 self.texth=0
245 self.textw=0
246 f=open("ea.txt","w+")
247 for line in text:
248 if text.index(line) == 0:
249
250 (theight,twidth)=debugger.draw_text(self.handler,x,y+self.texth,line+":",ImmDrawColors["Purple"])
251 if twidth > self.textw:
252 self.textw=twidth
253 self.texth=self.texth+theight
254 else:
255 line = line.replace("\x0a","").replace("\x0d","")
256
257 try:
258 asmline=line.split("||")[0]
259 commentline=line.split("||")[1]
260 (theight,twidth)=debugger.draw_text(self.handler,x,y+self.texth," " +asmline,ImmDrawColors[textcolor])
261 (theight,twidth2)=debugger.draw_text(self.handler,x+twidth,y+self.texth," " +commentline,ImmDrawColors["Red"])
262 twidth+=twidth2
263
264 except:
265 (theight,twidth)=debugger.draw_text(self.handler,x,y+self.texth," " +line,ImmDrawColors[textcolor])
266 if twidth > self.textw:
267 self.textw=twidth
268 self.texth=self.texth+theight
269
270
271 debugger.draw_line(self.handler,x-5,y-3,x-5,y+self.texth+2,ImmDrawColors[rectcolor],start)
272
273 debugger.draw_line(self.handler,x+self.textw+5,y-2,x+self.textw+5,y+self.texth+2,ImmDrawColors[rectcolor])
274
275 debugger.draw_line(self.handler,x-6,y-3,x+self.textw+5,y-2,ImmDrawColors[rectcolor])
276
277 debugger.draw_line(self.handler,x-6,y+self.texth+2,x+self.textw+5,y+self.texth+2,ImmDrawColors[rectcolor])
278 return None
279
281 debugger.draw_line(self.handler,x,y,x,y+3,ImmDrawColors[color])
282 debugger.draw_line(self.handler,x,y,x,y-3,ImmDrawColors[color])
283 debugger.draw_line(self.handler,x,y,x+3,y+3,ImmDrawColors[color])
284 debugger.draw_line(self.handler,x,y,x-3,y+3,ImmDrawColors[color])
285 debugger.draw_line(self.handler,x,y,x+3,y-3,ImmDrawColors[color])
286 debugger.draw_line(self.handler,x,y,x-3,y-3,ImmDrawColors[color])
287 return
288
290 self.start_x=width/2
291 self.start_y=10
292
293
295 return (self.start_x,self.start_y)
296
297
298
301 """ Initialize the Drawing class"""
302 self.title=""
303 self.start_address=0
304 self.handler=0
305 self.edgeproperties=[]
306
308 self.title=title
309 self.start_address=int(start_address,16)
310 self.handler=debugger.create_graph_window(title,self.start_address)
311 return self.handler
312
313
316
319
321 """ properties: { sourcename: "5" ,targetname: "6" ,label: "false", color: red }
322 """
323 self.edgeproperties.append(properties)
324
325
327 return self.edgeproperties
328
329
330
333 """ Initialize the Line class"""
334 self.x_pos=0
335 self.y_pos=0
336 self.x_to=0
337 self.y_to=0
338 self.color="Black"
339 self.handler=handler
340
341 - def draw(self,x_pos,y_pos,x_to,y_to,color):
342 self.x_pos=x_pos
343 self.y_pos=y_pos
344 self.x_to=x_to
345 self.y_to=y_to
346 self.color=color
347 return debugger.draw_line(self.handler,self.x_pos,self.y_pos,self.x_to,self.y_to,ImmDrawColors[self.color])
348
349
351 return (self.x_pos,self.y_pos,self.x_to,self.y_to)
352
355
358
359
360
363 """ Initialize the Recttext class"""
364 self.x1=0
365 self.y1=0
366 self.x2=0
367 self.y2=0
368 self.rely=0
369 self.relx=0
370 self.color="Black"
371 self.text=""
372 self.texth=0
373 self.textw=0
374 self.absy=0
375 self.absx=0
376 self.handler=handler
377 self.title=""
378 self.label=""
379 self.nodebuf=[]
380 self.child=[]
381
382
383 - def drawText(self,x,y,text,color):
384 debugger.Error("e")
385 theight=0
386 for line in text:
387
388 asmline=line.split("||")[0]
389 commentline=line.split("||")[1]
390 debugger.Error("asm: %s\ncomment: %s" % (asmline,commentline))
391 (theight,twidth)=debugger.draw_text(self.handler,x,y+self.texth,asmline,ImmDrawColors[color])
392 (theight,twidth2)=debugger.draw_text(self.handler,x+twidth,y+self.texth,commentline,ImmDrawColors["Red"])
393 twidth+=twidth2
394 if twidth > self.textw:
395 self.textw=twidth
396 self.texth=self.texth+theight
397 return None
398
400 self.x1=x1
401 self.y1=y1
402 self.x2=x2
403 self.y2=self.y2
404 self.color=color
405 return debugger.draw_rectangle(self.handler,x1,y1,x2,y2,ImmDrawColors[self.color])
406
409
412
415
418
421
424
425
426
428 theight=0
429 self.absy=0
430 self.absx=0
431 for line in text:
432 (twidth,theight)=debugger.get_text_size(self.handler,line)
433 if twidth > self.absx:
434 self.absx=twidth
435 self.absy=self.absy+theight
436 return (self.absy+4,self.absx+10)
437
440
443
445 self.relx=x
446 self.rely=y
447
449 return (self.relx,self.rely)
450