反转对 mmap() 的调用

逆向工程 C
2021-07-01 16:55:16

我目前正在逆向学习挑战。但是为什么mmap(包含fd的参数是4294967295?

(它不应该存在吗?之前没有用open,打开文件。)

https://snag.gy/8LPqoh.jpg

1个回答

对于签名mmapIS

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 

4294967295 在被视为有符号整数时与 -1 相同。

这些mmap电话实际上看起来像

mmap(
     NULL,                                /*addr*/
     321,                                 /*length*/
     PROT_EXEC | PROT_READ | PROT_WRITE,  /*prot*/
     MAP_ANONYMOUS | MAP_PRIVATE,         /*flags*/
     -1,                                  /*fd*/
     0                                    /*offset*/
)

现在根据手册页

地图_匿名

映射不受任何文件的支持;它的内容被初始化为零。fd 和 offset 参数被忽略;但是,如果指定了 MAP_ANONYMOUS(或 MAP_ANON)某些实现要求 fd 为 -1,并且便携式应用程序应确保这一点。MAP_ANONYMOUS 与 MAP_SHARED 结合使用仅在内核 2.4 之后的 Linux 上受支持。

它说如果MAP_ANONYMOUS已指定,那么我们可以使用-1asfd来解释您的问题。