gpt4 book ai didi

c - 如何使用 SIGSEGV 而不是 SIGABRT 退出?

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

我正在学习如何用这段代码引起缓冲区溢出。然后我用 GDB 运行它,当我输入导致堆栈崩溃的错误数据时,我退出程序收到信号 SIGABRT,中止。
__GI_raise 中的 0x00007ffff7a4af79 (sig=sig@entry=6)
在 ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: 没有那个文件或目录。
但是我正在阅读的两个指南都以 SIGSEGVEXC_BAD_ACCESS 退出,原因是(在最后一种情况下)KERN_INVALID_ADDRESS 和实际地址错误的输入。

我如何退出这些信号?是我的系统配置为以这种方式工作吗?

我在 Ubuntu 14.04 LTS Trusty 上运行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int test(char *test) {
char buf[10];
strcpy(buf, test);

return 0;
}

int main(int argc, char *argv[]) {
test(argv[1]);
printf("After test: %s\n", argv[1]);

return 0;
}

最佳答案

您的编译器似乎实现了堆栈粉碎保护 以防止缓冲区溢出。使用 -fno-stack-protector 标记编译。

关于c - 如何使用 SIGSEGV 而不是 SIGABRT 退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29063020/

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