Floating Point Exception
Closed this issue · 0 comments
xiaoxiongwang commented
Tested in Ubuntu 16.04, 64bit
I use the following command with the file:
./wavegain wavegain_floting_point_exception.wav
and get:
Floating point exception
I use gdb to analysis the bug and get the below information:
gdb-peda$ set args wavegain_floting_point_exception.wav
gdb-peda$ r
Starting program: wavegain wavegain_floting_point_exception.wav
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGFPE, Arithmetic exception.
[----------------------------------registers-----------------------------------]
RAX: 0x5e00e84b
RBX: 0x7fffffffd4e0 --> 0x7fffffffd700 --> 0x7fffffffd9b0 --> 0x0
RCX: 0x60c00000bf00 --> 0x0
RDX: 0x0
RSI: 0x3
RDI: 0x0
RBP: 0x7fffffffd500 --> 0x7fffffffd540 --> 0x7fffffffd630 --> 0x7fffffffd720 --> 0x7fffffffd9d0 --> 0x4197d0 (<__libc_csu_init>: push r15)
RSP: 0x7fffffffd340 --> 0xc00000002 --> 0x0
RIP: 0x40a5cc (<wav_open+3809>: idiv rdi)
R8 : 0x61600000fd60 --> 0x0
R9 : 0x7fffffffd2d0 --> 0x5e00e84b61746164
R10: 0x7ffff7fc5780 (0x00007ffff7fc5780)
R11: 0x7ffff692bf90 --> 0xfffda370fffda09f
R12: 0xffffffffa70 --> 0x0
R13: 0x7fffffffd380 --> 0x41b58ab3
R14: 0x7fffffffd380 --> 0x41b58ab3
R15: 0x0
EFLAGS: 0x10206 (carry PARITY adjust zero sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
0x40a5c0 <wav_open+3797>: imul edx,DWORD PTR [rbp-0x19c]
0x40a5c7 <wav_open+3804>: movsxd rdi,edx
0x40a5ca <wav_open+3807>: cqo
=> 0x40a5cc <wav_open+3809>: idiv rdi
0x40a5cf <wav_open+3812>: mov rcx,rax
0x40a5d2 <wav_open+3815>: mov rax,QWORD PTR [rbp-0x1b0]
0x40a5d9 <wav_open+3822>: add rax,0x10
0x40a5dd <wav_open+3826>: mov rdx,rax
[------------------------------------stack-------------------------------------]
0000| 0x7fffffffd340 --> 0xc00000002 --> 0x0
0008| 0x7fffffffd348 --> 0x60200000eff0 --> 0xff042546464952
0016| 0x7fffffffd350 --> 0x60c00000bf80 --> 0x40a8be (<wav_read>: push rbp)
0024| 0x7fffffffd358 --> 0x61600000fc80 --> 0xbebebebefbad2488
0032| 0x7fffffffd360 --> 0x100000000 --> 0x0
0040| 0x7fffffffd368 --> 0x60400000dfd0 --> 0xbebebebe00080000
0048| 0x7fffffffd370 --> 0x24 ('$')
0056| 0x7fffffffd378 --> 0x0
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
Stopped reason: SIGFPE
0x000000000040a5cc in wav_open (in=0x61600000fc80, opt=0x60c00000bf80, oldbuf=0x60200000eff0 "RIFF%\004\377", buflen=0xc) at audio.c:790
790 opt->total_samples_per_channel = len/(format.channels*samplesize);
gdb-peda$ bt
#0 0x000000000040a5cc in wav_open (in=0x61600000fc80, opt=0x60c00000bf80, oldbuf=0x60200000eff0 "RIFF%\004\377", buflen=0xc) at audio.c:790
#1 0x0000000000407833 in open_audio_file (in=0x61600000fc80, opt=0x60c00000bf80) at audio.c:362
#2 0x0000000000414ded in get_gain (filename=0x60700000df40 "wavegain_floting_point_exception.wav", track_peak=0x60600000efd8, track_gain=0x60600000efd0, dc_offset=0x60600000efe0,
offset=0x60600000eff0, settings=0x7fffffffd8f0) at wavegain.c:181
#3 0x000000000041198d in process_files (file_list=0x60600000efc0, settings=0x7fffffffd8f0, dir=0x41f1a0 ".") at main.c:197
#4 0x000000000041453f in main (argc=0x2, argv=0x7fffffffdab8) at main.c:729
#5 0x00007ffff67b7830 in __libc_start_main (main=0x4139ca <main>, argc=0x2, argv=0x7fffffffdab8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdaa8)
at ../csu/libc-start.c:291
#6 0x0000000000401ce9 in _start ()