编程范式13 笔记
来源:互联网 发布:福利直播软件 编辑:程序博客网 时间:2024/06/05 22:45
C的编译链接运行
#include<stdio.h>#include<stdlib.h>#include<assert.h>int main(){ void *mom=malloc(foo); assert(mom!=NULL); printf("Year!\n"); free(mum); return 0;}
gcc后会产生.o文件
然后连接产生可执行文件
.o文件是汇编代码
如果不#include<stdlib.h>
会有warning但是还是有.o文件,链接后还是能运行
如果没有#include<assert.h>
就报错了
int main(){int num=65;int length=strlen((char *)&num,num);printf("%d\n",length);//输出0(大端,认为是空)或者1(小端)return 0;}
int memcmp(void *v1);{ int n=17; int m=memcmp(&n); //int memcmp(void* v1,void *v2,size) }
n=17(size)
m(v2)
(v1)
saved pc
c:
CALL<memcmp>
c++
CALL<emcmp_void_p>
所以C++可以重载
segmentation fault & bus error
segmentation fault:错误地解引用,那个地址并没有在段中
bus error:你得到的地址不是你想要的地址
如
void *vp;*(short *)vp=7//除开short和char,首地址都是4对齐的//short 2对齐//50%概率bus err*(int *)vp=55;//25%概率bus err
buffer overflow
int main(){ int i; int array[4]; for(i=0;i<=4;i++) { array[i]=0; } return 0;}
saved pc
i
array[3]
array[2]
array[1]
array[0]
i=4时array[4]=0会让i=0,死循环
buffer overflow
int main(){ int i; short array[4]; //改int为short会发生什么? for(i=0;i<=4;i++) { array[i]=0; } return 0;}
大端系统在执行的时候不会出错
小端系统会
因为4放的位置不同
void foo(){ int array[4]; int i; for(i=0;i<=4;i++) { array[i]-=4; }}
会导致saved pc减了4
saved pc本应指向CALL<foo>
回退4步
又是死循环
阅读全文
0 0
- 编程范式13 笔记
- 编程范式学习笔记
- 《编程范式》学习笔记
- 编程范式2 笔记
- 编程范式11 笔记
- 编程范式14 笔记
- 编程范式23 笔记
- Programming Paradigms 编程范式-笔记
- 编程范式5 笔记 泛型
- 编程范式七 笔记 泛型栈
- 编程范式16 笔记 信号量
- 编程范式随课笔记(一)
- 编程范式随课笔记(二)
- 编程范式3 笔记 struct 内存模型
- 编程范式8 笔记 C/C++内存
- 编程范式9 笔记 伪汇编语言
- 编程范式 10 笔记 函数栈帧
- 编程范式15 笔记 并行化
- lua文件读写操作
- Python之函数练习题
- 程序员养成架构师之路
- matlab2c使用c++实现matlab函数系列教程-sqrt函数
- 选择标签中不包含指定标签的其他元素
- 编程范式13 笔记
- diff命令---待完善
- java代码转Smali代码
- material design 之 ripple(波纹)效果
- 162. Find Peak Element
- @RequiresPermissions 控制权限的异常处理以及Ajax方式请求时返回json
- 不规则卷积神经网络
- 插入、冒泡、归并、堆排序、快排总结
- Java学习线路