static int __init init(void)
{
printk(KERN_INFO "iptables-p2p %s initialized\n", IPT_P2P_VERSION);
printk(KERN_INFO "iptables-p2p p2p_match 0x%x\n", &p2p_match);
return ipt_register_match(&p2p_match);
}
natomiast wewnątrz ipt_register_match() printk pokazuje wartość 23 !
Jak to możliwe ? Zauważyłem ponadto, że kompilacja iptables-p2p
tworzy w katalogu plik ipt_p2p.mod.c z adresami funkcji:
{ 0x17f9b360, "struct_module" },
{ 0x91593197, "ipt_unregister_match" },
{ 0x71184db2, "ipt_register_match" },
{ 0x1b7d4074, "printk" },
jednak nie odpowiadają one adresom odczytanym z /proc/allsymbols
Co mnie dziwi pomimo złych adresów insmod jakoś odnajduje właściwy adres,
bo funkcja ip_register_match() jest przecież wywoływana.
Odręczna zmiana tych adresów w ipt_p2p.c nic nie zmienia.
Czy ktoś zechciałby podpowiedzieć dobry opis w sieci, który pomógłby
rozwiązać ten problem.
pozdrawiam
zbyszek lisiecki
--
http://zbyszek.evot.org