2

我只是在 MacOS X 上做一些有趣的组装,目前我只是试图使用 mmap 系统调用将文件映射到内存中,但我现在有点困惑。这是代码片段:

movq $0x20000c5, %rax               //mmap syscall
xorq %rsi,%rsi                      //
movq %rcx,%rdi                      //size of the file is in rcx
movq $0x1,%rdx                      //read only
movq $0x1,%r10                      //shared
movq finput(%rip),%r8               //file descriptor
xorq %r9,%r9                        //no offset
syscall

从设置进位标志的意义上讲,这不会产生错误,但是它在 rax 中返回 0,我认为它实际上应该返回指向它已将文件映射到的内存的指针。我当然试过检查明显的东西,文件大小或文件描述符没有任何问题。我敢打赌,我在这里遗漏了一些明显的东西,但我现在看不到。将非常感谢任何帮助。

4

1 回答 1

0

(答案在评论中,所以我在这里报告)

RSI 和 RDI 参数的顺序不正确。正确的代码是:

movq $0x20000c5, %rax               //mmap syscall
xorq %rdi,%rdi                      //
movq %rcx,%rsi                      //size of the file is in rcx
movq $0x1,%rdx                      //read only
movq $0x1,%rcx                      //shared
movq finput(%rip),%r8               //file descriptor
xorq %r9,%r9                        //no offset
syscall
于 2013-02-19T09:10:36.087 回答