- #include<stdio.h>
- int f(int a,int b) /* 一个简单的实例函数, 该函数中仅包含一条有效的语句。*/
- {
- return a+b; /* 这条语句编译后以二进制代码的形式存储在正文段里 */
- }
- int main()
- {
- int(*p)(int ,int ); /*函数的指针,定位到代码段*/
- void *q; /*任意类型指针,用于避免编译器的类型转换警告*/
- p=f;
- q=(void *)p; /*取得正文段内容*/
- printf("the code is : 0x%x", *((int *)q));/*将q转换为整型指针,意味着从地址q开始向后看四个字节*/
- *((int *)q)=0x12345678; /*更改正文段中4个字节的内容*/
- return 0;
- }
打印的是函数f中的语句“return a+b"
- $ ./motify_code
- the code is : 0x8be58955
- Segmentation fault
修改正文段时报错可知:linux环境下的正文段是受操作系统写保护的。
补充:函数的代码存储在代码段中。