我正在尝试构建和运行一些由其他人编写的复杂代码,我不知道他们是谁,也无法要求他们提供帮助。该代码读取 bpf(脑潜能文件)并将其转换为可读的 ascii 格式。它有3个C文件和2个对应的头文件。我通过微小的更改成功构建它,但是现在它因分段错误而崩溃。
我将问题缩小到 FindSectionEnd()(在 ReadBPFHeader.c 中),并发现在调用 sscanfLine()(在文件 sscanfLine.c 中)时发生错误(两者的代码如下)。
ui1 被定义为无符号字符。si1 被定义为字符。
就在从 sscanfLine() 返回之前,dp 指向的地址是 0x7e5191,或者类似的以 191 结尾的地址。但是,在返回 FindSectionEnd() 时,dp 指向 0x20303035 并显示“地址 0x20303035 超出范围”,即然后导致 strstr() 出现错误。FindSectionEnd() 中的循环在故障发生之前运行了 14 次迭代而没有问题。我不知道出了什么问题。我真的希望我在这里提供的信息是足够的。
ui1 *FindSectionEnd(ui1 *dp)
{
si1 Line[256], String[256];
int cnt=0;
while (sscanfLine(dp, Line) != EOF){
dp = (ui1 *)strstr(dp, Line);
dp+= strlen(Line);
sscanf(Line,"%s",String);
if(SectionEnd(String))
return(dp);
}
return(NULL);
}
si1 *sscanfLine(ui1 *dp, si1 *s)
{
int i = 0;
*s = NULL;
int cnt = 0;
while (sscanf(dp, "%c", s + i) != EOF){
cnt++;
dp++;
if(*(s + i) == '\n') {
*(s + i + 1) = '\0';
return s;
}
++i;
}
*(s + i) = '\0';
return s;
}