分段错误 - 32/64位问题?

时间:2013-03-10 11:04:02

标签: c triggers capture

我目前正在开发一个小项目,当特定限制超过处理后续步骤(可能是警报,空路由等)时,该项目会捕获数据包并触发外部应用程序或脚本。

我尝试使用此代码创建一个非常简单的触发器(“trigger”包含二进制或脚本的路径):

char * trigger_complete;
sprintf(trigger_complete, "%s %u %u %s %s %Lf", trigger, data[II].count, data[II].proto, inet_ntoa(data[II].src_ip), inet_ntoa(data[II].dst_ip), rate);
system (trigger_complete);

在我的Ubuntu 12.04.1 LTS上它似乎没有问题,我使用“echo”应用程序测试。

linux-gate.so.1 =>  (0xb779f000)
libpcap.so.0.8 => /usr/lib/i386-linux-gnu/libpcap.so.0.8 (0xb7752000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75a8000)
/lib/ld-linux.so.2 (0xb77a0000)

在Debian Wheezy和“grml”的实例上,我在执行二进制文件时收到Segmentation Fault。 (我通过评论并重新尝试来验证此问题是由上面的代码引起的。)

linux-vdso.so.1 =>  (0x00007fff875ff000)
libpcap.so.0.8 => /usr/lib/x86_64-linux-gnu/libpcap.so.0.8 (0x00007fa9c6048000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa9c5cbe000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa9c608d000)

我看到的唯一区别是架构,Ubuntu系统是32位操作系统,而Debian是64位操作系统。

我不确定这是不是问题,但似乎是这样。

任何人都可以帮我解决这个问题吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

由于对mark a comment as an answer的功能请求仍然被拒绝,我在此处复制上述解决方案。

...可能想为trigger_complete分配一些内存! - 托马斯