[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