Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/09/2013, à 17:24

cromanion

[RESOLU] gdb: signal SIGSEGV, Segmentation fault.

bonjour dominical smile

C'est un programme qui sert à piloter vlc de videolan en utilisant l'API de vlc.

(gdb) run
Starting program: ~C/vlcbs/vlcbs 2009-04-08\ 18:28:46 s c

my_date(): local secondes= '0x 524845C8'.
my_date(): local secondes= ' 1380468168'.

Program received signal SIGSEGV, Segmentation fault.
MAKE_TM (tm_dt=0xbffff3f8, s_dt=0x804d83d "\205\300\017\204\b\001")
    at tools_inline.c:1799
1799	   asm ("call _make_tm");
(gdb) backtrace
#0  MAKE_TM (tm_dt=0xbffff3f8, s_dt=0x804d83d "\205\300\017\204\b\001")
    at tools_inline.c:1799
#1  0x00288ff4 in ?? () from /lib/tls/i686/cmov/libc.so.6
#2  0x00144bd6 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
#3  0x08048991 in _start ()
(gdb) show values

Pour ceux qui utilisent des cartouches asm ("..."); ce sont des cartouches en
language assembleur insérés dans le language évolué comme le C.
Je suis dans ubuntu 10.04 'lucid'. L'application est compilé avec

gcc (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.

Ici le 'bug' est un 'call' qui n'est pas honoré.
Dans ce cas, les {'ret' 'jmp' 'loop' 'jc' 'jz' 'ja' etc...} ne sont pas honorés.
C'est une application que j'avais développé en 2008/2009 sur ubuntu 8.04.
Dans ubuntu 8.04, ça marche.
Le problème peut être dans un chevauchement de segment de mémoire.
Quan linux lance une application, il est forcé de relocaliser les sauts dont
les offsets sont dans une table en entête de l'application. Enfin dans
windows, la stratégie des fichiers.exe est comme ça.
Ce programme 'vlcbs' fait 78Ko dont dépasse un segment de mémoire.

Dernière modification par cromanion (Le 11/10/2013, à 11:25)

Hors ligne

#2 Le 29/09/2013, à 17:44

cromanion

Re : [RESOLU] gdb: signal SIGSEGV, Segmentation fault.

Une vue de la carte mémoire avec 'catchsegv' :

~C/vlcbs$ catchsegv ./vlcbs "2009-04-08 18:28:46" s c

my_date(): local secondes= '0x 5248581E'.
my_date(): local secondes= ' 1380472862'.
Segmentation fault
*** Segmentation fault
Register dump:

 EAX: 08053c60   EBX: 0026aff4   ECX: bfbad9a8   EDX: 00000036
 ESI: 00000000   EDI: 00000000   EBP: bfbae8c8   ESP: bfbad998

 EIP: 0804f6d9   EFLAGS: 00210286

 CS: 0073   DS: 007b   ES: 007b   FS: 0000   GS: 0033   SS: 007b

 Trap: 0000000d   Error: 00000000   OldMask: 00000000
 ESP/signal: bfbad998   CR2: 00000000

 FPUCW: ffff037f   FPUSW: ffff0000   TAG: ffffffff
 IPOFF: 00000000   CSSEL: 0000   DATAOFF: 00000000   DATASEL: 0000

 ST(0) 0000 0000000000000000   ST(1) 0000 0000000000000000
 ST(2) 0000 0000000000000000   ST(3) 0000 0000000000000000
 ST(4) 0000 0000000000000000   ST(5) 0000 0000000000000000
 ST(6) 0000 0000000000000000   ST(7) 0000 0000000000000000

Backtrace:
/lib/libSegFault.so(+0x206f)[0x2d006f]
??:0(??)[0x995400]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x126bd6]
??:0(_start)[0x8048991]

Memory map:

00110000-00269000 r-xp 00000000 08:03 526752 /lib/tls/i686/cmov/libc-2.11.1.so
00269000-0026b000 r--p 00159000 08:03 526752 /lib/tls/i686/cmov/libc-2.11.1.so
0026b000-0026c000 rw-p 0015b000 08:03 526752 /lib/tls/i686/cmov/libc-2.11.1.so
0026c000-0026f000 rw-p 00000000 00:00 0
002ce000-002d1000 r-xp 00000000 08:03 541234 /lib/libSegFault.so
002d1000-002d2000 r--p 00002000 08:03 541234 /lib/libSegFault.so
002d2000-002d3000 rw-p 00003000 08:03 541234 /lib/libSegFault.so
00995000-00996000 r-xp 00000000 00:00 0 [vdso]
00b9c000-00bb9000 r-xp 00000000 08:03 545797 /lib/libgcc_s.so.1
00bb9000-00bba000 r--p 0001c000 08:03 545797 /lib/libgcc_s.so.1
00bba000-00bbb000 rw-p 0001d000 08:03 545797 /lib/libgcc_s.so.1
00c32000-00c4d000 r-xp 00000000 08:03 541468 /lib/ld-2.11.1.so
00c4d000-00c4e000 r--p 0001a000 08:03 541468 /lib/ld-2.11.1.so
00c4e000-00c4f000 rw-p 0001b000 08:03 541468 /lib/ld-2.11.1.so
08048000-08052000 r-xp 00000000 08:04 4721878 /C/vlcbs/vlcbs
08052000-08053000 r--p 00009000 08:04 4721878 /C/vlcbs/vlcbs
08053000-08054000 rw-p 0000a000 08:04 4721878 /C/vlcbs/vlcbs
08054000-08055000 rw-p 00000000 00:00 0
0855e000-08583000 rw-p 00000000 00:00 0 [heap]
b77c1000-b77c3000 rw-p 00000000 00:00 0
b77d5000-b77d8000 rw-p 00000000 00:00 0
bfb9b000-bfbb0000 rw-p 00000000 00:00 0 [stack]

Dernière modification par cromanion (Le 29/09/2013, à 21:08)

Hors ligne

#3 Le 11/10/2013, à 11:23

cromanion

Re : [RESOLU] gdb: signal SIGSEGV, Segmentation fault.

enfagottage de ma routine "asm" dans un moule de fonction C, et ça marche.
le "call" à ma routine allait dans une adresse qui ne m'était pas allouée.

Hors ligne