Spørsmål:
Statisk analyse - Omfangsendringer
Vitaly Omelchenko
2014-01-30 22:52:02 UTC
view on stackexchange narkive permalink

Jeg leter etter en algoritme eller noen tips om hvordan du finner omfangsendringer når jeg gjør statisk analyse av en dekompilert ASM-kilde. Jeg trenger å kjenne til omfangsendringene for sporing av stabelbruk og nå definisjoner for variabler. Hvis jeg har et program som

  int somefunc (int b) {// Scope 1a = b + 1; if (a > 0) {// Scope 2 a = 0} else {/ / Scope 3 a = b;} returner a;  

Når jeg har konstruert flytgrafen fra forsamlingen, hvordan vet jeg at omfangsendringer fra 1-2 og tilbake fra 2-1 etc? Min eneste gjetning så langt er at det ville ha noe å gjøre med dominans og å se etter underbilder. Noen av problemene jeg vil se med denne tilnærmingen, vil være sløyfene eller uttalelsene som har tidlige avslutninger som pause; Fortsette; return - de vil produsere en graf der du ikke kan bestemme dominans og ikke vil kunne fortelle når omfanget ditt øker eller avtar.

Det er ikke noe slikt konsept på monteringsnivå, så enkelt sagt: du vet ikke. Du kan absolutt følge betingede hopp eller så, men de faller kanskje ikke sammen med omfang i originalen. I utgangspunktet er å gjøre C til montering til binær en tapsfri prosess, og du må takle det når du reverserer.
To svar:
Nikos M.
2014-05-25 07:54:07 UTC
view on stackexchange narkive permalink

Problemet med omfang (og det relaterte problemet med dynamisk skriving), for eksempel i JavaScript, blir taklet av Marijn Haverbekes tern-prosjekt. Kanskje dette kan være til stor hjelp for denne saken.

Effektivt når du har den dekompilerte kilden, kan du bruke sth som tern til å analysere den som kildekode på farten (som det gjøres i javascript som tern er designet)

ikke liker det? Likevel gir det en måte å ha et verktøy for å sjekke (statisk) omfanget av variabler i den dekompilerte kilden, tern kanskje for javascript (og er åpen kildekode), men det kan lett (antagelig) endres for annen kildekode
avgvstvs
2014-03-19 07:49:53 UTC
view on stackexchange narkive permalink

Begrepet leksikalt omfang er KUN tilgjengelig på et høyere språknivå enn montering. Kompilatoren er det som holder oversikt over omfanget. Når kilden er kompilert til maskinkode, slutter begrepet "omfang" å eksistere ... det er bare en lang strøm av instruksjoner.



Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...