Otázka:
Ladění pomocí radare2 pomocí dvou terminálů
ubnix
2017-09-28 12:07:57 UTC
view on stackexchange narkive permalink

Snažím se na to přijít už nějakou dobu a opravdu bych potřeboval pomoc. Nejprve úvod:

Používám nejnovější verzi radare2 z Github na 64bitovém Ubuntu 16.04 a mám následující ukázkový program r2_test.cpp :

  #include <cstdio>int main (int argc, char * argv []) {int num; while (1) {printf ("Zadejte číslo:"); scanf ("% d", &num); printf ("Zadali jste:% d \ n", num); } návrat 0;}  

To, co se snažím dosáhnout, je ladění tohoto programu pomocí radare2 a dvou terminálů tak, že spustím radare2 v okně terminálu T1 a mít vstup / výstup programů v okně terminálu T2 . Po nějakém výzkumu jsem zjistil, že by to mělo být pravděpodobně provedeno pomocí nástroje rarun2 .

Takže při mém prvním pokusu jsem si přečetl manuálovou stránku pro rarun2, konkrétně část s přesměrováním IO na jiný terminál a po identifikaci terminálu T2 jako / dev / pts / 17 jsem vytvořil následující soubor test.rr2 :

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

V terminálu T2 jsem pak spustil sleep 999999 a v terminálu T1 Spustím r2 -R test.rr2 -d a.out a při provádění příkazu dc uvnitř radare2 je vstup / výstup programů v terminálu T1 což není to, co jsem chtěl. Zkoušel jsem také varianty, jako je test.rr2 rovný

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

nebo

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

ale výsledek byl vždy stejný.

Při mém druhém pokusu jsem se po nějakém výzkumu a čtení pokusil spustit radare2 následujícím způsobem: r2 -d rarun2 program = a.out stdio = / dev / pts / 17 . S tímto jsem dosáhl přesměrování IO na terminál T2 , ale proces, který je laděn uvnitř radare2, je nástroj rarun2 a protože moje znalost Linuxu a reverzního inženýrství na něm není tak dobrá, ne Opravdu nevím, jak přistoupit k ladění procesu a.out .

Takže abych to shrnul, opravdu bych ocenil, kdyby zde někdo mohl sdílet, pokud lze tento druh ladění hotovo s radare2 a pokud je to možné, jak toho dosáhnout? Zkoušel jsem to také s použitím nc , ale s tímto tématem jsem nijak nepokročil.

Jeden odpovědět:
Megabeets
2017-09-28 13:42:39 UTC
view on stackexchange narkive permalink

Je to ve skutečnosti velmi jednoduché a funguje mi to dobře, jak vidíte v následujícím gifu:

Direct link


Nejprve musíte zjistit tty terminálu, na který chcete přesměrovat STDIO (aka Terminál 2, T2 ). Můžete to provést jednoduše spuštěním:

  $ tty / dev / pts / 2  

Tento tty bude brzy použit na rarun2 soubor profilu. Mezitím uvedeme T2 do režimu spánku pomocí spánku 999999 .

Přesun na Terminál 1 , vytvořme jednoduchý profil rarun2 s následujícím obsahem:

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

Nakonfigurovali jsme stdio pro přenos standardního vstupu a výstupu do T2 . Nyní spustíme náš program s profilem, který jsme právě vytvořili:

  $ r2 -e dbg.profile = profile.rr2 -d a.out Proces s PID 14074 started ... = attach 14074 14074bin.baddr 0x00400000Using 0x400000Asuming filepath /tmp/re/a.outasm.bits 64 - Nezapomeňte, že písmeno „g“ v radare je tiché [0x7f9654e0fd80] >  

( Totéž lze provést pomocí: r2 -r profil.rr2 -d a.out )
Program byl úspěšně načten v režimu ladění. Teď jen pro příklad, pojďme zarážku na druhé volání printf a spusťte program pomocí dc . V gif jsem nevytvářel zarážku.

  [0x7f9654e0fd80] > db 0x00400580 [0x7f9654e0fd80] > dcVýběr a pokračování: 14074  

Nyní nám T2 dává výstup a požádá o náš vstup:

  Zadejte číslo:  

Poté, co pošleme je to číslice našeho bodu zlomu na T1 požadavku:

  bod zlomu na: 400580 [0x00400580] >  

Nyní můžeme pokračovat provádění pomocí dc , smyčka bude pokračovat navždy a standardní vstup a výstup budou v T2.

Dobře, takže problém byl v tom, že Sublime do mého souboru profile.rr2 automaticky nepřidá znak „nového řádku“. Také jsem se snažil pouze s volbou -R as ní to nefunguje. Stále nechápu, proč to nefunguje s -R, ale dělá to s -e dbg.profile = ... Každopádně teď vím, jak to funguje, a moc děkuji. Pokud máte čas, můžete zkontrolovat, zda to pro vás bude fungovat pomocí -R.
Funguje to dobře s -R, jak jsem zmínil v příspěvku :) Zkontroloval jsem to několikrát. Jsem rád, že jsem mohl pomoci!
+1 pro ukázku gif, velmi objasňující


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...