diff --git a/subdisassem/disassemble.py b/subdisassem/disassemble.py index b773b9d..25f9b4b 100644 --- a/subdisassem/disassemble.py +++ b/subdisassem/disassemble.py @@ -49,6 +49,9 @@ class _CapstoneBase: def __len__(self) -> int: return len(self.disassembly) + def __lt__(self, other): + return len(self) < len(other) + @property def objdump(self) -> str: opcodes = str() diff --git a/subdisassem/schema.py b/subdisassem/schema.py index d043655..a43ffba 100644 --- a/subdisassem/schema.py +++ b/subdisassem/schema.py @@ -28,6 +28,12 @@ class Disassembly(Base): def __repr__(self): return f"" + def __len__(self) -> int: + return self.count + + def __lt__(self, other): + return len(self) < len(other) + @property def values(self) -> dict: values_dict = { diff --git a/subdisassem/scripts.py b/subdisassem/scripts.py index 49c18be..29c862f 100644 --- a/subdisassem/scripts.py +++ b/subdisassem/scripts.py @@ -116,13 +116,18 @@ def subdisassem_script(): session.commit() - count = session.query(Disassembly).order_by(desc("count")).first() - tops = ( - session.query(Disassembly) - .filter(Disassembly.count == count.count) - .order_by(desc("size")) - .all() - ) + tops = list() + + for arch in archs: + top = ( + session.query(Disassembly) + .filter(Disassembly.arch == arch.__name__) + .order_by(desc("count")) + .first() + ) + tops.append(top) + + tops = sorted(tops, key=len, reverse=True) for top in tops[:3]: logging.info(top)