ocgraph 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. ocgraph/__init__.py +0 -0
  2. ocgraph/__main__.py +95 -0
  3. ocgraph/configuration/__init__.py +4 -0
  4. ocgraph/configuration/architecture/__init__.py +8 -0
  5. ocgraph/configuration/architecture/architecture.py +66 -0
  6. ocgraph/configuration/architecture/arm.py +52 -0
  7. ocgraph/configuration/architecture/msp430.py +48 -0
  8. ocgraph/configuration/architecture/ppc.py +698 -0
  9. ocgraph/configuration/architecture/sparc.py +100 -0
  10. ocgraph/configuration/architecture/x86.py +34 -0
  11. ocgraph/configuration/configuration.py +122 -0
  12. ocgraph/configuration/disassembler/__init__.py +10 -0
  13. ocgraph/configuration/disassembler/disassembler.py +148 -0
  14. ocgraph/configuration/disassembler/gdb_default.py +11 -0
  15. ocgraph/configuration/disassembler/objdump_arm.py +11 -0
  16. ocgraph/configuration/disassembler/objdump_msp430.py +27 -0
  17. ocgraph/configuration/disassembler/objdump_ppc.py +11 -0
  18. ocgraph/configuration/disassembler/objdump_sparc.py +11 -0
  19. ocgraph/configuration/disassembler/objdump_x86.py +11 -0
  20. ocgraph/configuration/logger.py +50 -0
  21. ocgraph/data/__init__.py +9 -0
  22. ocgraph/data/address.py +58 -0
  23. ocgraph/data/basic_block.py +37 -0
  24. ocgraph/data/encoding.py +34 -0
  25. ocgraph/data/function_header.py +23 -0
  26. ocgraph/data/instruction.py +102 -0
  27. ocgraph/data/jump_table.py +60 -0
  28. ocgraph/interface/__init__.py +5 -0
  29. ocgraph/interface/analyzer.py +220 -0
  30. ocgraph/interface/coverage_reader.py +70 -0
  31. ocgraph/interface/drawer.py +181 -0
  32. ocgraph-0.3.0.dist-info/LICENSES/GTDGmbH.md +24 -0
  33. ocgraph-0.3.0.dist-info/LICENSES/MauriMustonen.md +24 -0
  34. ocgraph-0.3.0.dist-info/METADATA +55 -0
  35. ocgraph-0.3.0.dist-info/RECORD +37 -0
  36. ocgraph-0.3.0.dist-info/WHEEL +4 -0
  37. ocgraph-0.3.0.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,698 @@
1
+ # SPDX-License-Identifier: GTDGmbH
2
+ """Contains instruction info for PPC-compatible targets."""
3
+
4
+ from ocgraph.data import Instruction
5
+
6
+ from .architecture import GenericArchitecture
7
+
8
+ # fmt: off
9
+ ppc_call_opcodes = [
10
+ "bl",
11
+ ]
12
+
13
+ ppc_sink_opcodes = [
14
+ "blr",
15
+ ]
16
+
17
+ ppc_unconditional_branch_opcodes = [
18
+ "b", "ba", "bla",
19
+ "bctr", "bctrl", "blrl",
20
+ ]
21
+
22
+ ppc_conditional_branch_opcodes = [
23
+ "bdnz-",
24
+ "bdnz+",
25
+ "bdnz",
26
+ "bdn",
27
+ "bdnzl-",
28
+ "bdnzl+",
29
+ "bdnzl",
30
+ "bdnl",
31
+ "bdnza-",
32
+ "bdnza+",
33
+ "bdnza",
34
+ "bdna",
35
+ "bdnzla-",
36
+ "bdnzla+",
37
+ "bdnzla",
38
+ "bdnla",
39
+ "bdz-",
40
+ "bdz+",
41
+ "bdz",
42
+ "bdzl-",
43
+ "bdzl+",
44
+ "bdzl",
45
+ "bdza-",
46
+ "bdza+",
47
+ "bdza",
48
+ "bdzla-",
49
+ "bdzla+",
50
+ "bdzla",
51
+
52
+ "bge-",
53
+ "bge+",
54
+ "bge",
55
+ "bnl-",
56
+ "bnl+",
57
+ "bnl",
58
+ "bgel-",
59
+ "bgel+",
60
+ "bgel",
61
+ "bnll-",
62
+ "bnll+",
63
+ "bnll",
64
+ "bgea-",
65
+ "bgea+",
66
+ "bgea",
67
+ "bnla-",
68
+ "bnla+",
69
+ "bnla",
70
+ "bgela-",
71
+ "bgela+",
72
+ "bgela",
73
+ "bnlla-",
74
+ "bnlla+",
75
+ "bnlla",
76
+ "ble-",
77
+ "ble+",
78
+ "ble",
79
+ "bng-",
80
+ "bng+",
81
+ "bng",
82
+ "blel-",
83
+ "blel+",
84
+ "blel",
85
+ "bngl-",
86
+ "bngl+",
87
+ "bngl",
88
+ "blea-",
89
+ "blea+",
90
+ "blea",
91
+ "bnga-",
92
+ "bnga+",
93
+ "bnga",
94
+ "blela-",
95
+ "blela+",
96
+ "blela",
97
+ "bngla-",
98
+ "bngla+",
99
+ "bngla",
100
+ "bne-",
101
+ "bne+",
102
+ "bne",
103
+ "bnel-",
104
+ "bnel+",
105
+ "bnel",
106
+ "bnea-",
107
+ "bnea+",
108
+ "bnea",
109
+ "bnela-",
110
+ "bnela+",
111
+ "bnela",
112
+ "bns-",
113
+ "bns+",
114
+ "bns",
115
+ "bnu-",
116
+ "bnu+",
117
+ "bnu",
118
+ "bnsl-",
119
+ "bnsl+",
120
+ "bnsl",
121
+ "bnul-",
122
+ "bnul+",
123
+ "bnul",
124
+ "bnsa-",
125
+ "bnsa+",
126
+ "bnsa",
127
+ "bnua-",
128
+ "bnua+",
129
+ "bnua",
130
+ "bnsla-",
131
+ "bnsla+",
132
+ "bnsla",
133
+ "bnula-",
134
+ "bnula+",
135
+ "bnula",
136
+
137
+ "blt-",
138
+ "blt+",
139
+ "blt",
140
+ "bltl-",
141
+ "bltl+",
142
+ "bltl",
143
+ "blta-",
144
+ "blta+",
145
+ "blta",
146
+ "bltla-",
147
+ "bltla+",
148
+ "bltla",
149
+ "bgt-",
150
+ "bgt+",
151
+ "bgt",
152
+ "bgtl-",
153
+ "bgtl+",
154
+ "bgtl",
155
+ "bgta-",
156
+ "bgta+",
157
+ "bgta",
158
+ "bgtla-",
159
+ "bgtla+",
160
+ "bgtla",
161
+ "beq-",
162
+ "beq+",
163
+ "beq",
164
+ "beql-",
165
+ "beql+",
166
+ "beql",
167
+ "beqa-",
168
+ "beqa+",
169
+ "beqa",
170
+ "beqla-",
171
+ "beqla+",
172
+ "beqla",
173
+ "bso-",
174
+ "bso+",
175
+ "bso",
176
+ "bun-",
177
+ "bun+",
178
+ "bun",
179
+ "bsol-",
180
+ "bsol+",
181
+ "bsol",
182
+ "bunl-",
183
+ "bunl+",
184
+ "bunl",
185
+ "bsoa-",
186
+ "bsoa+",
187
+ "bsoa",
188
+ "buna-",
189
+ "buna+",
190
+ "buna",
191
+ "bsola-",
192
+ "bsola+",
193
+ "bsola",
194
+ "bunla-",
195
+ "bunla+",
196
+ "bunla",
197
+
198
+ "bdnzf-",
199
+ "bdnzf+",
200
+ "bdnzf",
201
+ "bdnzfl-",
202
+ "bdnzfl+",
203
+ "bdnzfl",
204
+ "bdnzfa-",
205
+ "bdnzfa+",
206
+ "bdnzfa",
207
+ "bdnzfla-",
208
+ "bdnzfla+",
209
+ "bdnzfla",
210
+ "bdzf-",
211
+ "bdzf+",
212
+ "bdzf",
213
+ "bdzfl-",
214
+ "bdzfl+",
215
+ "bdzfl",
216
+ "bdzfa-",
217
+ "bdzfa+",
218
+ "bdzfa",
219
+ "bdzfla-",
220
+ "bdzfla+",
221
+ "bdzfla",
222
+
223
+ "bf-",
224
+ "bf+",
225
+ "bf",
226
+ "bbf",
227
+ "bfl-",
228
+ "bfl+",
229
+ "bfl",
230
+ "bbfl",
231
+ "bfa-",
232
+ "bfa+",
233
+ "bfa",
234
+ "bbfa",
235
+ "bfla-",
236
+ "bfla+",
237
+ "bfla",
238
+ "bbfla",
239
+
240
+ "bdnzt-",
241
+ "bdnzt+",
242
+ "bdnzt",
243
+ "bdnztl-",
244
+ "bdnztl+",
245
+ "bdnztl",
246
+ "bdnzta-",
247
+ "bdnzta+",
248
+ "bdnzta",
249
+ "bdnztla-",
250
+ "bdnztla+",
251
+ "bdnztla",
252
+ "bdzt-",
253
+ "bdzt+",
254
+ "bdzt",
255
+ "bdztl-",
256
+ "bdztl+",
257
+ "bdztl",
258
+ "bdzta-",
259
+ "bdzta+",
260
+ "bdzta",
261
+ "bdztla-",
262
+ "bdztla+",
263
+ "bdztla",
264
+
265
+ "bt-",
266
+ "bt+",
267
+ "bt",
268
+ "bbt",
269
+ "btl-",
270
+ "btl+",
271
+ "btl",
272
+ "bbtl",
273
+ "bta-",
274
+ "bta+",
275
+ "bta",
276
+ "bbta",
277
+ "btla-",
278
+ "btla+",
279
+ "btla",
280
+ "bbtla",
281
+
282
+ "bc-",
283
+ "bc+",
284
+ "bc",
285
+ "bcl-",
286
+ "bcl+",
287
+ "bcl",
288
+ "bca-",
289
+ "bca+",
290
+ "bca",
291
+ "bcla-",
292
+ "bcla+",
293
+ "bcla",
294
+
295
+ "bdnzlr",
296
+ "bdnzlr-",
297
+ "bdnzlrl",
298
+ "bdnzlrl-",
299
+ "bdnzlr+",
300
+ "bdnzlrl+",
301
+ "bdzlr",
302
+ "bdzlr-",
303
+ "bdzlrl",
304
+ "bdzlrl-",
305
+ "bdzlr+",
306
+ "bdzlrl+",
307
+ # "blr",
308
+ "br",
309
+ # "blrl",
310
+ "brl",
311
+ "bdnzlr-",
312
+ "bdnzlrl-",
313
+ "bdnzlr+",
314
+ "bdnzlrl+",
315
+ "bdzlr-",
316
+ "bdzlrl-",
317
+ "bdzlr+",
318
+ "bdzlrl+",
319
+
320
+ "bgelr",
321
+ "bgelr-",
322
+ "bger",
323
+ "bnllr",
324
+ "bnllr-",
325
+ "bnlr",
326
+ "bgelrl",
327
+ "bgelrl-",
328
+ "bgerl",
329
+ "bnllrl",
330
+ "bnllrl-",
331
+ "bnlrl",
332
+ "blelr",
333
+ "blelr-",
334
+ "bler",
335
+ "bnglr",
336
+ "bnglr-",
337
+ "bngr",
338
+ "blelrl",
339
+ "blelrl-",
340
+ "blerl",
341
+ "bnglrl",
342
+ "bnglrl-",
343
+ "bngrl",
344
+ "bnelr",
345
+ "bnelr-",
346
+ "bner",
347
+ "bnelrl",
348
+ "bnelrl-",
349
+ "bnerl",
350
+ "bnslr",
351
+ "bnslr-",
352
+ "bnsr",
353
+ "bnulr",
354
+ "bnulr-",
355
+ "bnslrl",
356
+ "bnslrl-",
357
+ "bnsrl",
358
+ "bnulrl",
359
+ "bnulrl-",
360
+ "bgelr+",
361
+ "bnllr+",
362
+ "bgelrl+",
363
+ "bnllrl+",
364
+ "blelr+",
365
+ "bnglr+",
366
+ "blelrl+",
367
+ "bnglrl+",
368
+ "bnelr+",
369
+ "bnelrl+",
370
+ "bnslr+",
371
+ "bnulr+",
372
+ "bnslrl+",
373
+ "bnulrl+",
374
+ "bgelr-",
375
+ "bnllr-",
376
+ "bgelrl-",
377
+ "bnllrl-",
378
+ "blelr-",
379
+ "bnglr-",
380
+ "blelrl-",
381
+ "bnglrl-",
382
+ "bnelr-",
383
+ "bnelrl-",
384
+ "bnslr-",
385
+ "bnulr-",
386
+ "bnslrl-",
387
+ "bnulrl-",
388
+ "bgelr+",
389
+ "bnllr+",
390
+ "bgelrl+",
391
+ "bnllrl+",
392
+ "blelr+",
393
+ "bnglr+",
394
+ "blelrl+",
395
+ "bnglrl+",
396
+ "bnelr+",
397
+ "bnelrl+",
398
+ "bnslr+",
399
+ "bnulr+",
400
+ "bnslrl+",
401
+ "bnulrl+",
402
+ "bltlr",
403
+ "bltlr-",
404
+ "bltr",
405
+ "bltlrl",
406
+ "bltlrl-",
407
+ "bltrl",
408
+ "bgtlr",
409
+ "bgtlr-",
410
+ "bgtr",
411
+ "bgtlrl",
412
+ "bgtlrl-",
413
+ "bgtrl",
414
+ "beqlr",
415
+ "beqlr-",
416
+ "beqr",
417
+ "beqlrl",
418
+ "beqlrl-",
419
+ "beqrl",
420
+ "bsolr",
421
+ "bsolr-",
422
+ "bsor",
423
+ "bunlr",
424
+ "bunlr-",
425
+ "bsolrl",
426
+ "bsolrl-",
427
+ "bsorl",
428
+ "bunlrl",
429
+ "bunlrl-",
430
+ "bltlr+",
431
+ "bltlrl+",
432
+ "bgtlr+",
433
+ "bgtlrl+",
434
+ "beqlr+",
435
+ "beqlrl+",
436
+ "bsolr+",
437
+ "bunlr+",
438
+ "bsolrl+",
439
+ "bunlrl+",
440
+ "bltlr-",
441
+ "bltlrl-",
442
+ "bgtlr-",
443
+ "bgtlrl-",
444
+ "beqlr-",
445
+ "beqlrl-",
446
+ "bsolr-",
447
+ "bunlr-",
448
+ "bsolrl-",
449
+ "bunlrl-",
450
+ "bltlr+",
451
+ "bltlrl+",
452
+ "bgtlr+",
453
+ "bgtlrl+",
454
+ "beqlr+",
455
+ "beqlrl+",
456
+ "bsolr+",
457
+ "bunlr+",
458
+ "bsolrl+",
459
+ "bunlrl+",
460
+
461
+ "bdnzflr",
462
+ "bdnzflr-",
463
+ "bdnzflrl",
464
+ "bdnzflrl-",
465
+ "bdnzflr+",
466
+ "bdnzflrl+",
467
+ "bdzflr",
468
+ "bdzflr-",
469
+ "bdzflrl",
470
+ "bdzflrl-",
471
+ "bdzflr+",
472
+ "bdzflrl+",
473
+ "bflr",
474
+ "bflr-",
475
+ "bbfr",
476
+ "bflrl",
477
+ "bflrl-",
478
+ "bbfrl",
479
+ "bflr+",
480
+ "bflrl+",
481
+ "bflr-",
482
+ "bflrl-",
483
+ "bflr+",
484
+ "bflrl+",
485
+ "bdnztlr",
486
+ "bdnztlr-",
487
+ "bdnztlrl",
488
+ "bdnztlrl-",
489
+ "bdnztlr+",
490
+ "bdnztlrl+",
491
+ "bdztlr",
492
+ "bdztlr-",
493
+ "bdztlrl",
494
+ "bdztlrl-",
495
+ "bdztlr+",
496
+ "bdztlrl+",
497
+ "btlr",
498
+ "btlr-",
499
+ "bbtr",
500
+ "btlrl",
501
+ "btlrl-",
502
+ "bbtrl",
503
+ "btlr+",
504
+ "btlrl+",
505
+ "btlr-",
506
+ "btlrl-",
507
+ "btlr+",
508
+ "btlrl+",
509
+
510
+ "bclr-",
511
+ "bclrl-",
512
+ "bclr+",
513
+ "bclrl+",
514
+ "bclr",
515
+ "bcr",
516
+ "bclrl",
517
+ "bcrl",
518
+
519
+ # "bctr",
520
+ # "bctrl",
521
+
522
+ "bgectr",
523
+ "bgectr-",
524
+ "bnlctr",
525
+ "bnlctr-",
526
+ "bgectrl",
527
+ "bgectrl-",
528
+ "bnlctrl",
529
+ "bnlctrl-",
530
+ "blectr",
531
+ "blectr-",
532
+ "bngctr",
533
+ "bngctr-",
534
+ "blectrl",
535
+ "blectrl-",
536
+ "bngctrl",
537
+ "bngctrl-",
538
+ "bnectr",
539
+ "bnectr-",
540
+ "bnectrl",
541
+ "bnectrl-",
542
+ "bnsctr",
543
+ "bnsctr-",
544
+ "bnuctr",
545
+ "bnuctr-",
546
+ "bnsctrl",
547
+ "bnsctrl-",
548
+ "bnuctrl",
549
+ "bnuctrl-",
550
+ "bgectr+",
551
+ "bnlctr+",
552
+ "bgectrl+",
553
+ "bnlctrl+",
554
+ "blectr+",
555
+ "bngctr+",
556
+ "blectrl+",
557
+ "bngctrl+",
558
+ "bnectr+",
559
+ "bnectrl+",
560
+ "bnsctr+",
561
+ "bnuctr+",
562
+ "bnsctrl+",
563
+ "bnuctrl+",
564
+ "bgectr-",
565
+ "bnlctr-",
566
+ "bgectrl-",
567
+ "bnlctrl-",
568
+ "blectr-",
569
+ "bngctr-",
570
+ "blectrl-",
571
+ "bngctrl-",
572
+ "bnectr-",
573
+ "bnectrl-",
574
+ "bnsctr-",
575
+ "bnuctr-",
576
+ "bnsctrl-",
577
+ "bnuctrl-",
578
+ "bgectr+",
579
+ "bnlctr+",
580
+ "bgectrl+",
581
+ "bnlctrl+",
582
+ "blectr+",
583
+ "bngctr+",
584
+ "blectrl+",
585
+ "bngctrl+",
586
+ "bnectr+",
587
+ "bnectrl+",
588
+ "bnsctr+",
589
+ "bnuctr+",
590
+ "bnsctrl+",
591
+ "bnuctrl+",
592
+ "bltctr",
593
+ "bltctr-",
594
+ "bltctrl",
595
+ "bltctrl-",
596
+ "bgtctr",
597
+ "bgtctr-",
598
+ "bgtctrl",
599
+ "bgtctrl-",
600
+ "beqctr",
601
+ "beqctr-",
602
+ "beqctrl",
603
+ "beqctrl-",
604
+ "bsoctr",
605
+ "bsoctr-",
606
+ "bunctr",
607
+ "bunctr-",
608
+ "bsoctrl",
609
+ "bsoctrl-",
610
+ "bunctrl",
611
+ "bunctrl-",
612
+ "bltctr+",
613
+ "bltctrl+",
614
+ "bgtctr+",
615
+ "bgtctrl+",
616
+ "beqctr+",
617
+ "beqctrl+",
618
+ "bsoctr+",
619
+ "bunctr+",
620
+ "bsoctrl+",
621
+ "bunctrl+",
622
+ "bltctr-",
623
+ "bltctrl-",
624
+ "bgtctr-",
625
+ "bgtctrl-",
626
+ "beqctr-",
627
+ "beqctrl-",
628
+ "bsoctr-",
629
+ "bunctr-",
630
+ "bsoctrl-",
631
+ "bunctrl-",
632
+ "bltctr+",
633
+ "bltctrl+",
634
+ "bgtctr+",
635
+ "bgtctrl+",
636
+ "beqctr+",
637
+ "beqctrl+",
638
+ "bsoctr+",
639
+ "bunctr+",
640
+ "bsoctrl+",
641
+ "bunctrl+",
642
+
643
+ "bfctr",
644
+ "bfctr-",
645
+ "bfctrl",
646
+ "bfctrl-",
647
+ "bfctr+",
648
+ "bfctrl+",
649
+ "bfctr-",
650
+ "bfctrl-",
651
+ "bfctr+",
652
+ "bfctrl+",
653
+ "btctr",
654
+ "btctr-",
655
+ "btctrl",
656
+ "btctrl-",
657
+ "btctr+",
658
+ "btctrl+",
659
+ "btctr-",
660
+ "btctrl-",
661
+ "btctr+",
662
+ "btctrl+",
663
+
664
+ "bcctr-",
665
+ "bcctrl-",
666
+ "bcctr+",
667
+ "bcctrl+",
668
+ "bcctr",
669
+ "bcc",
670
+ "bcctrl",
671
+ "bccl",
672
+
673
+ "bctar-",
674
+ "bctarl-",
675
+ "bctar+",
676
+ "bctarl+",
677
+ "bctar",
678
+ "bctarl",
679
+ ]
680
+ # fmt: on
681
+
682
+
683
+ class PpcArchitecture(GenericArchitecture):
684
+ """PpcArchitecture Class."""
685
+
686
+ def is_call(self, instruction: Instruction) -> bool:
687
+ return instruction.opcode in ppc_call_opcodes
688
+
689
+ def is_branch(self, instruction: Instruction) -> bool:
690
+ return instruction.opcode in (
691
+ ppc_conditional_branch_opcodes + ppc_unconditional_branch_opcodes
692
+ ) and not self.is_call(instruction)
693
+
694
+ def is_unconditional_branch(self, instruction: Instruction) -> bool:
695
+ return instruction.opcode in ppc_unconditional_branch_opcodes
696
+
697
+ def is_sink(self, instruction: Instruction) -> bool:
698
+ return instruction.opcode in ppc_sink_opcodes