本文最后更新于283 天前,其中的信息可能已经过时,如有错误请发送邮件到506742773@qq.com
1、pwn138

继续做前置基础,这个好像是关于mmap的,学习一下
mian函数:

getpid()昨天遇到过是用来获取当前进程的进程标识符(PID)。这个标识符是一个唯一的数字,操作系统用它来区分不同的进程。
接着打印了这个进程的PID
mmap函数:
mmap允许用户将一个文件或其他对象映射到内存中。这样,对这段内存的读写操作就相当于对文件本身的读写,而无需再调用read()和write()系统调用,从而提高了文件操作的效率。
看一下函数的原型:
void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset);
start:指向欲映射的内存起始地址,通常设为NULL,代表让系统自动选定地址。
length:代表将文件中多大的部分映射到内存。
prot:映射区域的保护方式,可以是PROT_EXEC、PROT_READ、PROT_WRITE、PROT_NONE的组合。
flags:影响映射区域的各种特性,必须指定MAP_SHARED或MAP_PRIVATE。
fd:要映射到内存中的文件描述符。
offset:文件映射的偏移量,通常设置为0,代表从文件最前方开始对应,必须是分页大小的整数倍。
成功执行时,mmap返回被映射区的内存起始地址;失败则返回MAP_FAILED(-1),错误原因存于errno中。
这样就和main里的代码对应起来了
addr = mmap(0LL, 0x21000uLL, 3, 34, -1, 0LL)
建立了一个区域
munmap函数:
函数用于取消映射
int munmap(void *start, size_t length);
参数start是mmap返回的地址,length是映射区的大小。成功执行时,munmap返回0,失败时返回-1。
程序最后又取消了之前创建的区域,就是这样,最后拿flag

getchar用来打断执行,没什么特别的应该
2、pwn139

主要就是下面这段代码:

其实就是申请了一个堆然后把flag读入并输出,最后释放堆


好啦,就到这儿










