#1 Le 29/09/2013, à 17:24
- cromanion
[RESOLU] gdb: signal SIGSEGV, Segmentation fault.
bonjour dominical
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