解码 Linux 上的 mmap() 标志

Decoding mmap() flags on Linux

我正在对一个 ELF 二进制文件进行逆向工程,在程序集中,我可以看到调用了 mmap() 并将标志参数设置为 0x22。

我如何解码这个标志代表什么?

根据:http://man7.org/linux/man-pages/man2/mmap.2.html,flags值可以通过在flags之间进行OR运算得到。

因此,0x22 可能如下所示:

0x20 || 0x2

查了一下Linux上的头文件,我想,应该是:MAP_PRIVATE || MAP_ANONYMOUS

对吗?

头文件中还提到了一些其他标志。

谢谢。

不,你必须使用按位或而不是逻辑或,所以

#include <sys/mman.h>

然后在 mmap 系统调用的 flags 参数中,这个值就是你想要的值:

(MAP_PRIVATE | MAP_ANONYMOUS)

如果您 运行 在 strace 程序下的二进制文件,它将显示用于系统调用参数的符号值。这是解码这些参数的最简单方法。