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