十二、进程地址空间(pmap;vdso;mmap)

一、进程地址空间
char* p可以和intptr_t互相转换
1、可以指向任何地址
2、合法的地址(可读或可写)
    (1)代码(main, %rip会从此处取出待执行指令), 只读
    (2)数据(static,int x),读写
    (3)堆栈(int y),读写
    (4)运行时分配内存,读写
    (5)动态链接库
3、非法的地址
    (1)NULL,导致segmentation fault 
二、查看进程地址空间
pmap(1) report memory of a precess
如何查看进程的地址空间
![在这里插入图片描述](https://img-blog.csdnimg.cn/078241dd2ccd44c6b81b19bff8919371.png)
1、最小的Hello world (静态/动态链接)
    (1)进程的地址空间:若干连续的“段”
    (2)“段”的内存可以访问
    (3)不在段内/违反权限的内存访问触发SIGSEGV
            gdb可以越权访问,但是不能访问不存在的地址
三、操作系统提供查看进程地址空间的机制
RTFM:/proc/[pid]/maps (man 5 proc)
1、进程地址空间中的每一段
    (1)地址(范围)和权限(rwxsp)
    (2)对应的文件:offset,dev,inode,pathname
2、和readelf里的信息互相验证

四、进程的地址空间

进程的地址空间=内存里若干连续的“段”

1、每一段是可访问(读/写/执行)的内存

        (1)可能映射到某个文件和/或在进程间共享

管理进程地址空间的系统调用

//映射
void *mmap(void* addr, size_t length, int port, int flag, int fd, off_t offset);
//取消映射
void munmap(void,* addr, size_t length);
//修改映射权限
int mprotect(void,* addr, size_t length, int port);

2、RTFM:状态增加/删除/修改一段可访问的内存

五、地址空间隔离

每个*ptr只能访问本进程(状态机)的内存

1、除非mmap显示指定、映射共享文件或共享内存多线程

2、实现了操作系统最重要的功能:进程之间的隔离

六、修改器

1、修改器

        (1)通过open ”/proc/pid/mem“

        便利内存中的某个值,根据修改值,可以锁定地址空间;通过修改该地址的值,实现修改。

        如:修改器就是通过值锁定地址,实现游戏金币数值修改

2、变速齿轮

        (1)“欺骗”进程时钟

        源头:闹钟、睡眠、gettimeofday

        拦截它们需要跟复杂的技术

        在时间调用(系统调用)处,添加一个跳转指令,跳转至自定义时间处理函数,可以实现时间齿变换

3、游戏安全

控制/数据流完整性

        (1)保护进程的完整性

        独立的进程/驱动做完整性验证

        (2)保护隐私数据不被其他进程读写

        拦截向本进程的ReadProcessMemory和WriteProcessMemory,发现后立即拒绝执行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值