C程序的存储布局——代码段

Code:
  1. #include<stdio.h>  
  2. int f(int a,int b)  /* 一个简单的实例函数, 该函数中仅包含一条有效的语句。*/  
  3. {  
  4.   return a+b;   /* 这条语句编译后以二进制代码的形式存储在正文段里 */  
  5. }  
  6. int main()  
  7. {  
  8.   int(*p)(int ,int );  /*函数的指针,定位到代码段*/  
  9.   void *q;        /*任意类型指针,用于避免编译器的类型转换警告*/  
  10.   p=f;             
  11.   q=(void *)p;    /*取得正文段内容*/  
  12.   printf("the code is : 0x%x", *((int *)q));/*将q转换为整型指针,意味着从地址q开始向后看四个字节*/  
  13.   *((int *)q)=0x12345678;     /*更改正文段中4个字节的内容*/  
  14.   return 0;  
  15. }  

打印的是函数f中的语句“return a+b"

Code:
  1. $ ./motify_code  
  2. the code is : 0x8be58955  
  3. Segmentation fault  

修改正文段时报错可知:linux环境下的正文段是受操作系统写保护的。

补充:函数的代码存储在代码段中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值