gpt4 book ai didi

linux - procps 导致堆栈崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:21 25 4
gpt4 key购买 nike

我一直在编写一个程序,试图使用 procps 库来找到自己。但由于某种原因它会破坏堆栈。这是我的代码:

int main(){
PROCTAB *ptp;
proc_t task;
pid_t mypid[1];
mypid[0] = getpid();
printf("My id: %d\n", mypid[0]);
ptp = openproc(PROC_PID, mypid, 1);
if(readproc(ptp, &task)){
printf("Task id:%d\n",task.XXXID);
}
else{
printf("Error: could not find currect task\n");
}
closeproc(ptp);
printf("Done\n");
return 0;
}

运行程序时得到的输出是:

$ ./test 
My id is: 8514
Task id is:8514
Done
*** stack smashing detected ***: ./test terminated
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x45)[0xb7688dd5]
/lib/i386-linux-gnu/libc.so.6(+0xffd8a)[0xb7688d8a]
./test[0x804863e]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75a24d3]
./test[0x80484f1]
======= Memory map: ========
...
Aborted (core dumped)

有人知道为什么会发生这种情况吗?难道我做错了什么?谢谢。

编辑:我查看了头文件,注意到我错误地使用了 openproc 函数,正确的使用方法是(对于 pid)是让 mypid 数组以 null 终止,所以我将代码更改为:

int main(){
PROCTAB *ptp;
proc_t task;
pid_t mypid[2];
mypid[0] = getpid();
memset(&mypid[1], 0, sizeof(pid_t));
printf("My id: %d\n", mypid[0]);
ptp = openproc(PROC_PID, mypid);
if(readproc(ptp, &task)){
printf("Task id:%d\n",task.XXXID);
}
else{
printf("Error: could not find currect task\n");
}
closeproc(ptp);
printf("Done\n");
return 0;
}

它仍然会压垮堆栈。

最佳答案

这里对我有用。获得该版本的 procps 后,它编译并运行良好:

$ gcc -Wall -Werror -o rp -L. -lproc-3.2.8 rp.c
$ ./rp
My id: 11468
Task id:11468
Done

更新

尝试修改版本:

proc_t *result;
...
if((result = readproc(ptp, NULL))){
printf("Task id:%d\n",result->XXXID);
free(result);
}

关于linux - procps 导致堆栈崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11250786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com