[linux] FW: Help please:gdb:Ako debugovat chyby vzniknute pocas navratu z funkcie [resp vo vunkcii ???()]?

Andrej Hosna Andrej.Hosna na iblsoft.com
Pondělí Prosinec 2 18:48:33 CET 2002


On Monday 02 December 2002 17:46, you wrote:
>  Uz som to nasiel... Ale bola to fuska.. Problem bol v stack-u.. Nechapen
>  sice aky, lebo chyba nastala pri volani return, ale ak som deklaroval
>  premenne volajucej  funkcie, ktore pouzivam ako parametre inej funkcie
>  volanej z volajucej, ako static chyba zmizla... Ja ich vsak nepotrebujem
> ako
>  static...Mozno islo o vykonavanie mimo poradia, alebo sa volana funkcia
>  spusti az po return-e volajucej.. Mozno je problem v tom, ze volana
> pouziva funkcie Xlib (X Win programovanie najnizsej urovne, ak nepocitam X
> protocol)
>  a mozno je chyba v tom, ze program musi bezat s prioritou -20 a tam sa ten
>  stack nehodi...
Tazko povedat , IMHO to vyzera na 
a) binarku/libky bez debug infa
b) (skorej) ta posledna funkcia posahala stack (alebo to mohla byt aj 
niektora volana skorej) 
Pouzi nejaku kniznicu ktora strazi pristupy do pamate a zrejme velmi rychlo 
prides na to ze kde je problem. Skus napr efence.

ved si len tak z paze napis maly program

#include <stdio.h>
#include <sys/types.h>
#include <signal.h>

int fn (int a){ int bb=1; return fn1(a); }
int fn1 (int a){ int bb=1; return fn2(a); }
int fn2 (int a){ int bb=1; return fn3(a); }
int fn3 (int a){
    *((&a)+7) = *((&a)+15);
    kill (getpid(), 11);
}
int main (void)
{
    int aaa=0xaabbccdd;
    return fn(aaa);
}

Program received signal SIGSEGV, Segmentation fault.
0x4005b971 in kill () from /lib/libc.so.6
(gdb) bt
#0  0x4005b971 in kill () from /lib/libc.so.6
#1  0x08048544 in fn3 (a=-1430532899) at stack_poc.c:10
#2  0x08048508 in fn2 (a=-1430532899) at stack_poc.c:7
#3  0x080484a8 in fn (a=-1430532899) at stack_poc.c:5
#4  0x080484a8 in fn (a=-1430532899) at stack_poc.c:5
#5  0x08048568 in main () at stack_poc.c:15
#6  0x400495b0 in __libc_start_main () from /lib/libc.so.6
aj ked je jasne podla programu ze #3 ma byt in fn1

-- 
Andrej HOSNA (Andrej.Hosna na iblsoft.com) 
IBL Software Engineering, http://www.iblsoft.com 
Stare Zahrady 35, 82105 Bratislava, Slovakia 
Tel: +421-2-43427449, fax: +421-2-43427214



Další informace o konferenci linux