Linux内核编程(项目笔记)——项目:进程内存映射
2011-08-07 05:09
211 查看
对与内核所有的操作都是在管理员的身份下的
首先是编译问题,语句应该这样写的:
gcc –o lkpmem lkpmem.c liblkpsinglefoo.so
而很可能会出现这样的错误:
error while loading shared libraries:/lib/liblkpsinglefoo.so: cannot restore segment prot after reloc: Permissiondenied
这样可以用以下两个步骤解决:
编辑/etc/selinux/config,找到这段:
把 SELINUX=enforcing 注释掉:#SELINUX=enforcing ,然后新加一行为:
保存,关闭。
……
编辑/etc/sysconfig/selinux,找到:
如果SELINUX已经是 SELINUX=disabled,那么就不用改了,否则就把SELINUX=enforcing 注释掉,新加一行:
保存,退出。
郁闷的是.我把SELinux关闭后还是不行.于是到google上search.发现这个很有用.
在你保证SElinux 被disable后.还执行下
chcon -t texrel_shlib_t
如: chcon -t texrel_shlib_t /路径/路径/名字.so (这个文件视具体执行文件.)
以上两步.已经解决了很多server的问题了.
这两种方法是网上摘录的,确实是这样。顺利编译为lkpmem
之后执行./lkpmem
并且在另一终端下(注意:也是要管理员身份)
ps aux | grep lkpmem
cat /proc/<pid>/maps
以上就是整个项目的执行过程所遇到的问题的解决方法,而下面将要说下这个项目主要是要我们学到什么?
warning: incompatible implicit declarationof built-in function ‘printf’
对于globalvar1和globalvar2这两个为为初始化和已初始化的全局变量,存放在数据段中,在内存中的地址为0x8049870和0x8049864相隔12个字节单位??为什么?
而localvar1是动态分配的局部变量,也就是堆
后面的两个都是局部变量,同个内存地址的原因是因为调用函数时申请,退出函数时就释放,也就是入栈与出栈了。
首先是编译问题,语句应该这样写的:
gcc –o lkpmem lkpmem.c liblkpsinglefoo.so
而很可能会出现这样的错误:
error while loading shared libraries:/lib/liblkpsinglefoo.so: cannot restore segment prot after reloc: Permissiondenied
这样可以用以下两个步骤解决:
编辑/etc/selinux/config,找到这段:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
把 SELINUX=enforcing 注释掉:#SELINUX=enforcing ,然后新加一行为:
SELINUX=disabled
保存,关闭。
……
编辑/etc/sysconfig/selinux,找到:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
如果SELINUX已经是 SELINUX=disabled,那么就不用改了,否则就把SELINUX=enforcing 注释掉,新加一行:
SELINUX=disabled
保存,退出。
郁闷的是.我把SELinux关闭后还是不行.于是到google上search.发现这个很有用.
在你保证SElinux 被disable后.还执行下
chcon -t texrel_shlib_t
如: chcon -t texrel_shlib_t /路径/路径/名字.so (这个文件视具体执行文件.)
以上两步.已经解决了很多server的问题了.
这两种方法是网上摘录的,确实是这样。顺利编译为lkpmem
之后执行./lkpmem
并且在另一终端下(注意:也是要管理员身份)
ps aux | grep lkpmem
cat /proc/<pid>/maps
以上就是整个项目的执行过程所遇到的问题的解决方法,而下面将要说下这个项目主要是要我们学到什么?
warning: incompatible implicit declarationof built-in function ‘printf’
对于globalvar1和globalvar2这两个为为初始化和已初始化的全局变量,存放在数据段中,在内存中的地址为0x8049870和0x8049864相隔12个字节单位??为什么?
而localvar1是动态分配的局部变量,也就是堆
后面的两个都是局部变量,同个内存地址的原因是因为调用函数时申请,退出函数时就释放,也就是入栈与出栈了。
相关文章推荐
- 使用内存映射文件在进程间传递数据流(开发笔记)
- windows笔记-使用内存映射文件在进程之间共享数据
- windows笔记-使用内存映射文件在进程之间共享数据
- 【Demo 0115】内存映射方式实现进程间数据共享
- HBase 学习笔记---守护进程及内存调优
- 用内存映射文件在进程中共享数据
- uc笔记09---进程通信,管道,进程间通信,共享内存,消息队列,信号量,IPC 命令
- Linux内核编程(项目笔记)——项目:创建并口驱动程序
- 【转】一条进程的栈区、堆区、数据区和代码区在内存中的映射
- redisbook笔记——redis内存映射数据结构
- 【算法学习笔记】78. STL二分的练习 下标映射的处理技巧 SJTU OJ 1053 二哥的内存
- 【面经笔记】内存映射、共享内存
- 5.VC(Custom)-进程间共享内存映射FileMapping
- windows笔记-内存映射文件
- 内存_进程内存映射
- 关于Windows编程中进程虚拟地址空间/虚拟内存及内存映射方面的资料
- Java 一条进程的栈区、堆区、数据区和代码区在内存中的映射
- 用内存映射文件在进程中共享数据http://blog.csdn.net/zicheng_lin/article/details/6660404
- 一条进程的栈区、堆区、数据区和代码区在内存中的映射
- 操作系统--内存学习笔记(2)进程内存管理--虚拟内存