2009-10-04 14 views
5

Per saperne di più sui sistemi FreeBSD e * nix in generale, sto iniziando a guardare i binari del gioco Capture The Flag di DEFCON 17. In questo momento, sto invertendo il binario tucod. Ecco alcune informazioni eventualmente utili su tucod:gdb che non raggiunge i punti di interruzione

tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped 

Alcune altre informazioni eventualmente utili acquisite alcune brevi analisi statica è che tucod lega sulla porta 0xDEAD (carino, eh?) E se si dà una password specifica ("HANGEMHIGH ! ") giocherà un gioco di hang-man con te.

Il problema che sto incontrando è che non sto colpendo i miei punti di interruzione in gdb. In particolare, il punto di interruzione che sto cercando di raggiungere è nel codice che gestisce la connessione client. Senza punti di interruzione, il codice viene eseguito come previsto. Quando imposto un breakpoint su quel codice, il bambino esce (invece di entrare in gdb, come previsto). Se metto i breakpoint prima che il server si stacchi dal bambino, posso colpirlo bene ma dopo aver colpito "continua" il bambino non continua a elaborare la mia connessione (cioè, non mi chiederà una password o giocherà a hang-man).

Poiché le forche daemon quando riceve una nuova connessione, cerco di raccontare gdb per seguire il bambino con questo comando:

(gdb) set follow-fork-mode child 

Ma dopo un solo passo le istruzioni dopo il bivio, sembra che questo non funziona

Ho provato a cercare le chiamate a signal, pensando di aver implementato un gestore SIGINT personalizzato (o simile), ma l'unica chiamata a signal che posso vedere gestisce SIGCHLD.

mio punto di interruzione in gdb attualmente si presenta così:

(gdb) info breakpoints 
Num Type   Disp Enb Address What 
1 breakpoint  keep y 0x080497d0 

E 0x080497d0 è l'indirizzo che voglio spezzare nel codice elaborazione client.

Sono una sorta di novità nell'analisi del software su sistemi * nix e potrebbero utilizzare alcuni indicatori. In quale altro modo dovrei risolvere il problema del perché GDB non colpirà i miei breakpoint? O c'è qualcosa di importante che sto solo trascurando?

C'è uno torrent disponibile con tutti i file binari del gioco per chi è interessato a vedere il binario di prima mano.

risposta

2

Look here per la risposta. In breve, sembra che GDB supporti la modalità di debug dei bambini solo su HP-UX e Linux.

+0

Grazie! Il work-around che ho impiegato per questo è stato quello di rattoppare il file binario e fare in modo che il genitore esegua la parte del bambino. Per me, è più semplice che provare ad aggiungere una chiamata al sonno, dato che sono senza fonte. Ma una spiegazione di ciò che stava accadendo era ciò che stavo davvero cercando. Grazie ancora. – mrduclaw

+0

@Nikolai collegamento interrotto – nouveau

Problemi correlati