[Tcpick-project] bug delle connessioni dopo il primo tracciamento
Status: Beta
Brought to you by:
duskdruid
From: Francesco S. `D. <dus...@in...> - 2004-01-08 23:04:18
|
Ho di nuovo raccolto le energie e mi sono concentrato su gdb. (tcpick 0.1.18-test1) Niente da fare, l'indirizzo di *tcppacket passato alla verify() cambia, inspiegavolmente, irrazionalmente e lo snip che vedete in fondo ne e' la prova palese. Non mi rimane che mettermi le mani nei capelli, oppure affidarmi alla vostra esperienza. Sembra che il problema sia abbastanza a basso livello. Mi sono accorto che la funzione chiamata dalla pcap_loop (ovvero got_packet) ha come secondo argomento 0xbffff8d0 e, guarda caso, e' lo stesso argomento che viene passato a verify(). Personalmente non me ne intendo, ma puo' darsi che sia in qualche modo un'implementazionne errata dello stack (quello hardware, dove vengono memorizzati gli argomenti delle funzioni)? Ah, ho gcc versione 3.2.3, gdb 5.3, linux 2.4.22 Grazie Francesco (segue l'output di gdb) [snip] Breakpoint 1, got_packet (useless=0x0, hdr=0xbffff8d0, packet=0x806a8d8 "") at loop.c:175 175 payload_len=hdr->len-(int)(payload-packet);/*calculate lenght of data section*/ (gdb) p *tcppacket $10 = {source = 34433, dest = 6400, seq = 2827910518, ack_seq = 0, res1 = 0, doff = 10, fin = 0, syn = 1, rst = 0, psh = 0, ack = 0, urg = 0, res2 = 0, window = 53270, check = 1955, urg_ptr = 0} (gdb) p tcppacket $11 = (struct tcphdr *) 0x806a8fc (gdb) s 176 verify(ippacket,tcppacket,payload,payload_len); /* verify the packet*/ (gdb) s verify (ippacket=0x806a8e8, tcppacket=0xbffff8d0, payload=0x806a914 "\004\002\b\n", payload_len=16) at stack.c:248 248 if(match(*stack_ptr,ippacket,tcppacket, (gdb) p tcppacket $12 = (struct tcphdr *) 0xbffff8d0 (gdb) p *tcppacket $13 = {source = 60843, dest = 16381, seq = 651146, ack_seq = 76, res1 = 12, doff = 4, fin = 0, syn = 0, rst = 0, psh = 0, ack = 0, urg = 0, res2 = 0, window = 0, check = 17, urg_ptr = 8} (gdb) bt #0 verify (ippacket=0x806a8e8, tcppacket=0xbffff8d0, payload=0x806a914 "\004\002\b\n", payload_len=16) at stack.c:248 #1 0x08049ff4 in got_packet (useless=0x0, hdr=0xbffff8d0, packet=0x806a8d8 "") at loop.c:176 #2 0x0804c38e in pcap_read_packet () #3 0x0804d68d in pcap_loop () #4 0x0804b504 in main (argc=-1073743068, argv=0x806a6f8) at tcpick.c:471 #5 0x4003dd06 in __libc_start_main () from /lib/libc.so.6 (gdb) [/snip] -- www.linux.it/~stablum |