Linux内核编程(项目笔记)——项目:进程内存映射

对与内核所有的操作都是在管理员的身份下的

 

首先是编译问题,语句应该这样写的:

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

后面的两个都是局部变量,同个内存地址的原因是因为调用函数时申请,退出函数时就释放,也就是入栈与出栈了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值