Gcc 使用staic库时发生堆栈粉碎错误

Gcc 使用staic库时发生堆栈粉碎错误,gcc,Gcc,我开发了一个静态库和一个测试应用程序来调用 功能 现在,当我执行测试应用程序时,它能够进入 函数并计算所需的值,但当返回为 称之为堆栈粉碎错误 ./test_app USB Handle opened SUCCESSFULLY *** stack smashing detected ***: /home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app terminated ======= Backtrace: ====

我开发了一个静态库和一个测试应用程序来调用 功能

现在,当我执行测试应用程序时,它能够进入 函数并计算所需的值,但当返回为 称之为堆栈粉碎错误

./test_app 
USB Handle opened SUCCESSFULLY
*** stack smashing detected ***: /home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7ffff7b25807]
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x0)[0x7ffff7b257d0]
/home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app[0x4008ec]
/home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app[0x4006ed]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7ffff7a3c76d]
/home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app[0x400619]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:08 1186                               /home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app
00601000-00602000 r--p 00001000 08:08 1186                               /home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app
00602000-00603000 rw-p 00002000 08:08 1186                               /home/avinay/Documents/iProbe/Experiments/iProbe_linux_lib/test_app
00603000-00624000 rw-p 00000000 00:00 0                                  [heap]
7ffff7805000-7ffff781a000 r-xp 00000000 08:05 658720                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff781a000-7ffff7a19000 ---p 00015000 08:05 658720                     /lib/x86_64-linux-gnu/libgcc_s.so.1 
7ffff7a19000-7ffff7a1a000 r--p 00014000 08:05 658720                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff7a1a000-7ffff7a1b000 rw-p 00015000 08:05 658720                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff7a1b000-7ffff7bd0000 r-xp 00000000 08:05 658699                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffff7bd0000-7ffff7dcf000 ---p 001b5000 08:05 658699                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffff7dcf000-7ffff7dd3000 r--p 001b4000 08:05 658699                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffff7dd3000-7ffff7dd5000 rw-p 001b8000 08:05 658699                     /lib/x86_64-linux-gnu/libc-2.15.so
7ffff7dd5000-7ffff7dda000 rw-p 00000000 00:00 0 
7ffff7dda000-7ffff7dfc000 r-xp 00000000 08:05 658679                     /lib/x86_64-linux-gnu/ld-2.15.so
7ffff7fdd000-7ffff7fe0000 rw-p 00000000 00:00 0 
7ffff7ff6000-7ffff7ffb000 rw-p 00000000 00:00 0 
7ffff7ffb000-7ffff7ffc000 r-xp 00000000 00:00 0                          [vdso]
7ffff7ffc000-7ffff7ffd000 r--p 00022000 08:05 658679                     /lib/x86_64-linux-gnu/ld-2.15.so
7ffff7ffd000-7ffff7fff000 rw-p 00023000 08:05 658679                     /lib/x86_64-linux-gnu/ld-2.15.so
7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
这是测试应用程序

#include <stdio.h>
#include "leapfrog.h"

void main()
{
unsigned int mid=0x0;

USB_Init();
mid = Read_MID();

printf("\n mid = 0x%x\n",mid);

USB_Deinit();
return;
}
#包括
#包括“leapfrog.h”
void main()
{
无符号整数mid=0x0;
USB_Init();
mid=读取_mid();
printf(“\n mid=0x%x\n”,mid);
USB_Deinit();
返回;
}
上面是测试应用程序,它在库中引用此函数

uint16 Read_MID(void)
{
int8 buf[8]={0};
uint16 mid;
//Read Vendor id
buf[0] = 0xFE;
msp_write(0x41,buf,1);
msp_read(0x41,buf,2);

mid = buf[0];
mid <<= 8;
mid |= buf[1];

return mid;

}
uint16读取中间(无效)
{
int8buf[8]={0};
uint16-mid;
//读取供应商id
buf[0]=0xFE;
msp_写入(0x41,buf,1);
msp_读取(0x41,buf,2);
mid=buf[0];

mid我通过添加更多数组空间解决了这个问题

int8 buf[8]={0};
我做得很好

int8 buf[10]={0};