dns-terror (fastresolve-2.10_5) core dump na FreeBSD 10.x
Dan Lukes
dan at obluda.cz
Thu Feb 25 17:59:54 CET 2016
Miroslav Lachman wrote:
> Konecne jsem se dostal k tomu, abych si to zkompiloval v poudriere s
> WITH_DEBUG=yes. Nainstaloval na zkusebni stroj a ted jsem z core dostal
> tohle
> (gdb) bt
> #0 0x0000000000405c26 in BoolString::operator= (this=0x802816130,
> other=@0x7fffffffdc40)
> at BoolString.h:58
> #1 0x000000000040291a in submit_query (ads=0x802817400,
> reslist=@0x7fffffffe1a0,
> lp=0x8028bc080) at dns-terror.cc:347
> #2 0x0000000000404870 in main (argc=6, argv=0x7fffffffe690) at
> dns-terror.cc:763
>
>
> Ale tohle uz je pro me spanelska vesnice a nic mi to nerika.
Takze nejdriv "kde":
K chybe doslo v kodu co byl vygenerovan z radku 58 v BoolString.h,
kteryzto kod byl zavolan z funkce submit_query, radku 347 v
dns-terror.cc, ktery byl volan z funkce main, radek 763 tehoz zdrojoveho
souboru.
A ted co:
> Program terminated with signal 4, Illegal instruction.
V prelozenem kodu je instrukce, ktere konkretni procesor nerozumi.
Takze zrejme jde o chybu pri prekladu - kod je prelozen pro jiny
procesor nez na jakem nasledne bezi.
Alternativni moznost je, ze kod, ktery zhavaroval, uz davno neni
prelozenym kodem, neb ho program pri svem behu poskodil a prepsal.
Mel jsem ale dojem, ze uz pomerne dlouho je na FreeBSD spustitelny kod
chranen proti zapisu a spadlo by to uz pri pokusu o zapis do tehle
pameti. Ale mozna to lze ovlivnit nejakymi parametry linkovani, takze
uplne vyradit tuhle moznost si netroufam.
Zustanem u te prvni moznosti.
Ten kod v BoolString.h je celkem trivialni prirazeni. Takze bude treba dat:
"set disassembly-flavor intel" (ledaze preferujes defaultni att) a
disassembly 0x405c26
Ono to vypise vysledek prekladu od zacatku te funkce. U me ale na adrese
405c26 instrukce nezacina, takze je zrejmy, ze ja mam prelozeno jinak
(jina verze OS, jina verze prekladace, jine nastaveni systemu, jina
uroce optimalizace pri prekladu, ...).
To by mohlo podezreni potvrdit nebo vyvratit.
Mimochodem, dotceneho mista se tyka warning uz pri prekladu:
> ./BoolString.h:59:3: warning: control reaches end of non-void function [-Wreturn-type]
> }
> ^
To by pad zpusobit nemelo, ale faktem je, ze funkce ma vracet hodnotu a
pritom se navratova hodnota nenastavuje. Je pravda, ze v pripade
optimalizaci by to mohlo zpusobit, ze oprimalizator nejaky potrebny kod
vyradi, protoze ho bude pokladat za zbytecny. To ale tezko rict ...
Dan
More information about the Users-l
mailing list