ctfshow:pwn138、pwn139
本文最后更新于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);

参数startmmap返回的地址,length是映射区的大小。成功执行时,munmap返回0,失败时返回-1。

程序最后又取消了之前创建的区域,就是这样,最后拿flag


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


2、pwn139


主要就是下面这段代码:


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


好啦,就到这儿

学累了就看看艾莉同学吧......
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇