您的位置:首页 > 运维架构 > Linux

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,找到这段:

# 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是动态分配的局部变量,也就是堆

后面的两个都是局部变量,同个内存地址的原因是因为调用函数时申请,退出函数时就释放,也就是入栈与出栈了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: