Jeg forsøger at generere en grovkornet Opkaldsgraf baseret på nogle samlingskoder adskilt fra binær på x86 32 bit platform.
Det er meget svært at generere en præcis Ring til graf baseret på ASM-kode, idet jeg tænker på forskellige indirekte kontrolflowoverførsler, så lige nu overvejer jeg kun direkte kontrolflowoverførsel .
Så først prøver jeg at identificere funktioner
(start- og slutadresser) i den adskilte samlingskode fra en strippet binær på x86, 32bit.
Lige nu er min plan på en eller anden måde sådan:
Hvad angår startadresserne, kan jeg konservativt overveje, at enhver samlingskode ser sådan ud
push% ebp
angiver startadressen af en funktion.
og også kan jeg scanne hele problemet ved at identificere alle -opkald
-instruktionerne med destinationen, overvej disse funktionsopkalds destinationer, da alle funktionens startadresse
Problemerne er:
-
s ome af funktionerne defineret i en binær kaldes måske aldrig.
-
noget af
-opkaldet
er optimeret somjump
af kompilator (tænker på rekursivt haleopkald)
Med hensyn til slutadressen bliver tingene mere vanskelige, fordi flere ret
kunne eksistere i en enkelt funktion ...
Så jeg tænker, at jeg måske konservativt betragter området mellem enhver nærmeste funktionsstartadresse som en funktion ..
Har jeg ret ? Er der nogen bedre løsning ..?