blob: a2564c0d52990211b6768040d42b4fba70343a81 (
plain) (
blame)
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
|
from dataclasses import dataclass, field
@dataclass
class Gadget:
"""
Basic gadget description object
offset (int): The location this gadget is found at. What `offset` is
relative to depends on context.
asm (list[re.Match]): A list of assembly instructions matched by the gadget
search query.
"""
offset: int = 0
asm: list = field(default_factory=list)
def __index__(self):
"""Convert object to integer using offset value."""
return self.offset
def __add__(self, x):
"""Return new object with adjusted offset."""
return Gadget(self.offset + x, self.asm)
def __sub__(self, x):
"""Return new object with adjusted offset."""
return self + (-x)
def __repr__(self):
"""Return human-readable Gadget."""
s = hex(self.offset)
if len(self.asm) > 0:
asm = "; ".join([ m.string for m in self.asm ])
s += f", '{asm}'"
return f"Gadget({s})"
|