On Unix-like operating systems, a process that accesses invalid memory receives the SIGSEGV signal. On Microsoft Windows, a process that accesses invalid memory receives the STATUS_ACCESS_VIOLATION exception.

1.最常见的SEGV: 访问0地址

#include <stdio.h>int main()
{int *p = 0;printf("%d", *p); /* SEGV: try to access address 0 */return 0;
}

2.修改const 变量

int main(void)
{char *s ="hello zeku"; /* s in .rodata section */*s ='o'; /* SEGV: write .radata section */return 0;
}
#include <stdio.h>const int g = 10;
int main()
{int *p = (int *)&g;(*p)++;  /* SEGV: try to modify const var */printf("%d", *p);return 0;
}

3_1 尝试运行在.data section

#include <stdio.h>int g = 10; /* .data section, r+w, not x */
typedef void (*F_P)();void f()
{printf("hello zeku\n");
}int main()
{F_P fp = f;fp();F_P fp1 = (F_P)&g;fp1(); /* SEGV: try to execute in .data section */return 0;
}

3_2 尝试运行在stack

#include <stdio.h>  typedef void (*F_P)();int main (void)
{  int m = 5; /* stack: rw, not x*/int n = 6;F_P fp = (F_P)&m;fp(); /*SEGV: excute in stack */return 0;
}  

4. 修改代码段

#include <stdio.h>void f()
{printf("hello zeku\n");
}int main()
{int *p = (int *)&f;(*p)++; /*SEGV: try to write .text section*/return 0;
}

5. 栈溢出

int main(void)
{main(); /* SEGV: stack overflow */return 0;
}

扩展:

进程收到SIGSEGV信号后,我们给SIGSEGV注册回调函数,打印backtrace.

refer to: sigaction/backtrace/backtrace_symbols

怎么编写段错误(Segmentation fault)的程序相关推荐

  1. C 总线错误 (bus error) - 段错误 (segmentation fault)

    C 总线错误 (bus error) - 段错误 (segmentation fault) 两个常见的运行时错误: bus error (core dumped) - 总线错误 (信息已转储) seg ...

  2. 总结段错误(Segmentation fault)

    总结段错误(Segmentation fault) 1)往受到系统保护的内存地址写数据 有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问. 1 # ...

  3. linux read函数段错误,linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数...

    进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...

  4. QT安装段错误segmentation fault

    QT安装段错误segmentation fault 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 QT安装段错误segme ...

  5. Ubuntu--(8)段错误Segmentation fault (core dumped)

    段错误 指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况,例如: 访问不存在的内存地址 #include<st ...

  6. C/C++编程:linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是 ...

  7. 宋宝华:让Linux的段错误(segmentation fault)不再是一个错误

    今天周末,娃儿们配合不闹事,写一篇短小精悍的文章吧,反正文章长了大家也没时间看.今天文章的目标是,如何在进程访问空指针等情况下,产生段错误后,不再退出而是继续运行. 这件事情,对于熔断(meltdow ...

  8. 段错误(Segmentation fault)

    段错误 背景 Debug 背景 在使用MPI并行化矩阵乘向量的实验中,发现如果矩阵的规模规模较大时,就会导致段错误. 将错误代码进行简化,如下所示 /* File name: seg_error.c ...

  9. 【BUG】ELF文件执行时出现段错误Segmentation fault,解决:使用010编辑器修改ELF文件不可执行段权限

    问题:段错误,.eh_frame不可执行. 需求:改执行权限. 工具:010 Editer,我的版本:12.0.1 Windows 10. 工具下载:010编辑器官网下载页. 第一步 查看段的执行权限 ...

最新文章

  1. mvn项目中的pom文件提示Error parsing lifecycle processing instructions解决
  2. Natural 自然语言处理(NLP)「全解析」
  3. redis发布与订阅消息
  4. 东方通 中间件_东方通:中间件国产替代进程中的艰难领军者
  5. C# lambda表达式及初始化器
  6. 计算机视觉与深度学习 | 视觉里程计综述(框架+算法)
  7. VTK:PolyData之DeleteCells
  8. ui自动化测试框架_浅谈前端(UI)自动化测试
  9. oracle asm参数优化,关于ASM参数文件的问题
  10. [swift 进阶]读书笔记-第八章:错误处理 C8P3 带有类型的错误
  11. DRF的解析器和渲染器
  12. centos本地yum源配置
  13. oracle oaf界面个性化,OAF—个性化和扩展维护
  14. 请求的操作需要提升 win10
  15. [Java] [SurfaceView] 使用EGL
  16. 为什么你的孩子拼命做题,成绩还总是上不去?
  17. 词根词缀|ori/orn/ortho/pact/pan及词源O的故事
  18. 从传统金融变身科技公司后,2017年的平安交了这样一份答卷
  19. 【写作技巧】五个方法让孩子迷上写作文!
  20. 【线性代数 宋浩】P3行列式的性质

热门文章

  1. 构建自己的PHP框架--构建缓存组件(1)
  2. Cassandra 1.2 发布,NoSQL 数据库
  3. ORB_SLAM2源码:ORBmatcher.cc
  4. rb c语言,C语言,RB和RBT什么区别啊???这里的typedef 什么作用???
  5. ELFhash - 优秀的字符串哈希算法
  6. 快手用旺旺瓶子做机器人_用平底锅做西多士,早餐不发愁,孩子三天两头点名吃,简单快手...
  7. Linux导入ora-39070,impdp 导入数据报ORA-39002,ORA-39070,ORA-39002, ORA-39087
  8. tls 禁用重协商_TLS Https连接失败问题(协商失败)
  9. 晴天计算机按键,电脑怎样才能在按键的时候,按下去按键没反应,手台起来才有呢?...
  10. 某单位招聘考试需要考核数学英语计算机,2010年10月自学考试电子商务网站设计原理试题...