deSALT——index小bug[错误]*** buffer overflow detected ***: deSALT terminated Aborted

直接使用deSALT建立索引的小bug

错误描述:在这里插入代码片
*** buffer overflow detected ***: deSALT terminated
Aborted
在这里插入图片描述
一直没有去读deSALT的论文,临近开题前夕想要测试一下这个工具,结果上来索引第一步就卡住了,自身对于Linux下写C经验较少,又不太懂,最后都没有测试这个工具。今天终于index成功了。但是在比对阶段也有个问题,等我解决了后续再更新。

一开始以为是我的文件名太长的问题或者路径名问题,改来改去还是有问题,崩溃==

而且,我单独去使用了deBG,是可以index成功的,所以感觉代码有个小地方错了。

今天仔细读了一下代码,一行一行查了每个代码的用法,最终改成功了!

话不多说,上代码:

/src/desalt_index.c
int desalt_index(int argc, char *argv[])
{
	// clock_t t = clock();
	char *ref_fa = 0;
	char *index_route = 0;
    
    char dir[1024]; //将1024改为2048
    char desalt_path[1024];
    int r;

	if(optind + 3 > argc)	return desalt_index_usage();

	ref_fa = strdup(argv[optind+1]);
	index_route = strdup(argv[optind+2]);
    
    r = readlink("/proc/self/exe", dir, 2048);//出错地方
    
    .......
 }

记录一下readlink的相关信息:
相关函数: stat, lstat, symlink
表头文件: #include
定义函数:ssize_t readlink(const char *path, char *buf, size_t bufsiz);
函数说明:readlink()会将参数path的 符号链接内容存储到参数buf所指的内存空间,返回的内容不是以\000作字符串结尾,但会将字符串的字符数返回,这使得添加\000变得简单。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断,如果 readlink 第一个参数指向一个文件而不是 符号链接时,readlink 设 置errno 为 EINVAL 并返回 -1。 readlink()函数组合了open()、read()和close()的所有操作。
返回值 :执行成功则返回字符串的字符数,失败返回-1, 错误代码存于errno
执行成功则返回ssize_t

函数中:
/proc/self/exe是一个符号链接,代表当前程序的绝对路径
用readlink读取/proc/self/exe可以获取当前程序的绝对路径

要统一!!!后边要系统的去学一下这些函数。仍然一知半解,有好的教程欢迎推荐!!!

你可能感兴趣的:(linux,linux,编程语言)