Fråga:
Felsökning med radare2 med två terminaler
ubnix
2017-09-28 12:07:57 UTC
view on stackexchange narkive permalink

Jag har försökt ta reda på detta under ganska lång tid nu och skulle verkligen behöva lite hjälp. För det första lite intro:

Jag kör den senaste versionen av radare2 från Github på en 64bit Ubuntu 16.04 och har följande exempelprogram r2_test.cpp :

  #include <cstdio>int main (int argc, char * argv []) {int num; medan (1) {printf ("Ange ett nummer:"); scanf ("% d", &num); printf ("Du angav:% d \ n", num); } returnera 0;}  

Det jag försöker uppnå är att felsöka detta program med radare2 och två terminaler på ett sätt som jag kör radare2 i terminalfönstret T1 och har programmen in / ut i terminalfönstret T2 . Efter en del undersökningar tänkte jag att detta antagligen skulle göras med hjälp av verktyget rarun2 .

Så för mitt första försök läser jag man-sidan för rarun2, speciellt delen med omdirigering av IO till en annan terminal och efter identifiering av T2 -terminalen som / dev / pts / 17 Jag skapade följande test.rr2 -fil:

  #! / usr / bin / rarun2stdio = / dev / pts / 17  

I T2 terminal har jag sedan kört sleep 999999 och i terminal T1 Jag kör r2 -R test.rr2 -d a.out och när kommandot dc körs inuti radare2 är programmets in- / utgång i terminal T1 vilket inte är vad jag ville ha. Jag har också provat variationer som att göra test.rr2 lika

  #! / Usr / bin / rarun2stdin = / dev / pts / 17stdout = / dev / pts / 17  

eller

  #! / Usr / bin / rarun2stdio = / dev / pts / 17stdin = / dev / pts / 17stdout = / dev / pts / 17  

men resultatet var alltid detsamma.

För mitt andra försök, efter lite forskning och läsning, försökte jag köra radare2 på följande sätt: r2 -d rarun2-program = a.out stdio = / dev / pts / 17 . Med detta har jag uppnått omdirigering av IO till terminal T2 , men processen som debugges inuti radare2 är det rarun2-verktyget och eftersom min kunskap om Linux och reverse engineering på det inte är så bra, gör jag inte vet inte riktigt hur man går vidare till felsökning av a.out -processen.

Så, för att sammanfatta, jag skulle verkligen uppskatta om någon kunde dela här om den här typen av felsökning kan vara gjort med radare2 och, om det går, hur man uppnår det? Jag har också provat det med nc , men jag har inte gjort några framsteg i det här ämnet med det.

Ett svar:
Megabeets
2017-09-28 13:42:39 UTC
view on stackexchange narkive permalink

Det är faktiskt väldigt enkelt och fungerar bra för mig som du kan se i följande gif:

Direct link


Först måste du ta reda på tty för den terminal du vill omdirigera STDIO till (aka Terminal 2, T2 ). Du kan göra det genom att helt enkelt utföra:

  $ tty / dev / pts / 2  

Denna tty kommer snart att användas på rarun2 Låt oss sätta T2 i vila genom att använda sömn 999999 .

Flyttar till Terminal 1 , låt oss skapa en enkel rarun2 -profil med följande innehåll:

  #! / usr / bin / rarun2stdio = / dev / pts / 2  

Vi konfigurerade stdio för att överföra standardinmatning och utdata till T2 . Nu ska vi köra vårt program med den profil som vi just har skapat:

  $ r2 -e dbg.profile = profile.rr2 -d a.out Process with PID 14074 startade ... = bifoga 14074 14074bin.baddr 0x00400000Använda 0x400000Anta filpath /tmp/re/a.outasm.bits 64 - Tänk på att 'g' i radare är tyst [0x7f9654e0fd80] >  

( Samma kan göras med: r2 -r profil.rr2 -d a.out )
Programmet laddades fram i felsökningsläge. Nu bara för exemplet, låt oss sätta en brytpunkt på det andra samtalet till printf och starta programmet med dc . I gif skapade jag inte en brytpunkt.

  [0x7f9654e0fd80] > db 0x00400580 [0x7f9654e0fd80] > dcVälja och fortsätta: 14074  

Nu ger T2 oss utdata och ber om vår inmatning:

  Ange ett nummer:  

När vi skickar det är en siffra som vår brytpunkt på T1 träff:

  träffpunkt vid: 400580 [0x00400580] >  

Vi kan nu fortsätta körningen med hjälp av dc , skulle slingan fortsätta för evigt och standardinmatning och utdata kommer att vara i T2.

Okej, så problemet var att Sublime inte automatiskt lägger till en "newline" karaktär i min profile.rr2-fil. Jag försökte bara med alternativet -R och med det fungerar det inte. Jag förstår fortfarande inte varför det inte fungerar med -R men gör med -e dbg.profile = ... Hur som helst, jag vet nu hur man får det att fungera och tack så mycket. Om du har tid kan du kontrollera om det fungerar för dig med -R.
Det fungerar bra med -R som jag nämnde i inlägget :) Jag kollade det några gånger. Glad att jag kunde hjälpa!
+1 för gif-demo, mycket förtydligande


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...