Spørsmål:
Hvordan fungerer GDBs prosessopptak?
ŹV -
2013-03-24 22:46:39 UTC
view on stackexchange narkive permalink

En nysgjerrig og nyttig funksjon i GDB er prosessopptak, slik at en analytiker kan gå fremover og bakover gjennom kjøring, og skrive en kontinuerlig logg over endringene i programtilstand som tillater bemerkelsesverdig nøyaktig avspilling av programmet kode.

Selv om vi alle trygt kan si at prosessregistreringsloggen inneholder kjørbare endringer i de forskjellige data- og kontrollregistrene, er funksjonaliteten mye mer enn å holde en seriell fremstilling av den nåværende fortsettelsen. For eksempel har jeg vært i stand til å bekrefte tilstanden til en kjørbar som bruker tråder for å endre delt minne.

Vi kan absolutt ikke forvente at tidsavhengig kode skal fungere, men hvis trådkode som endrer delt tilstand kan generelt sett bli trukket bakover og fortsatt arbeide pålitelig igjen , hvilke begrensninger har prosessopptak utover de rent arkitektoniske utfordringene (dvs. forskjøvet trinn) spesifisert i dokumentasjonen?

Er dette virkelig reverse engineering? Det virker for meg at det er mer relatert til videresendingsteknikk og lesekode når GDB-kilden er åpen.
Poeng tatt, jeg tror emnet absolutt er av interesse for omvendt ingeniører, så jeg banket på at det ble ansett som passende.
AFAIK er det basert på en relativt ny CPU-funksjon i Intel x86-prosessorer. Det er den samme funksjonen som brukes til "innspilling" i VMware.
@PeterAndersson: stemte for å gjenåpne. Ja, jeg tror debuggere og deres underliggende teknologi i form av dynamisk analyse faktisk er en del av revers engineering som helhet og RCE spesifikt.
@0xC0000022L, mens det er av interesse, er det ikke egentlig reverse engineering imho. Jeg personlig synes det er interessant, men jeg vil nok spørre på GDB-adresselisten.
Jeg tror vi alle kan være enige om at spørsmålet (generelt) er av umiddelbar interesse for omvendt ingeniører. I tillegg er sjansen for å motta et gjennomtenkt og intelligent svar relatert til dette spesielle spørsmålet mye større her enn på StackOverflow, som jeg tror fortjener din vurdering Peter.
Selv om dette spørsmålet ikke handler om å gjøre RE, er det av spesiell interesse for folk som gjør RE, og det handler om å forstå et verktøy for RE på en måte som hjelper å forstå RE-teknikker. Så jeg tror det er temaet på dette nettstedet.
En svar:
Igor Skochinsky
2013-03-26 03:03:38 UTC
view on stackexchange narkive permalink

Funksjonen er beskrevet litt mer detaljert på GDB wiki:

Slik fungerer den

Behandle post og repriser ved å logge utførelsen av hver maskininstruksjon i barneprosessen (programmet som feilsøkes), sammen med hver tilsvarende endring i maskinstatus (verdiene til minne og registre). Ved suksessivt å "angre" hver endring i maskintilstand, i omvendt rekkefølge, er det mulig å tilbakestille tilstanden til programmet til et vilkårlig punkt tidligere i utførelsen. Ved å "gjøre om" endringene i den opprinnelige rekkefølgen, kan programtilstanden flyttes fremover igjen.

Denne presentasjonen beskriver enda flere av det indre.

I tillegg til ovenstående kan GDB for noen eksterne mål benytte seg av deres "native" omvendt kjøring ved å sende Remote Serial Protocol pakker bc / code> (bakover fortsett) og bs (bakover trinn). Slike mål inkluderer:

  • moxie-elf simulator
  • Simics
  • VMware Workstation 7.0
  • SID-simulatoren (xstormy16-arkitektur)
  • kronikk-gdbserver ved hjelp av valgrind
  • Angre bort


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...