【问题标题】:Mmap returns 0 on MacOS X 10.8.2 in assemblerMmap 在汇编器中的 MacOS X 10.8.2 上返回 0
【发布时间】:2012-10-11 05:05:00
【问题描述】:

我只是在 MacOS X 上进行一些组装以获得乐趣,目前我只是尝试使用 mmap 系统调用将文件映射到内存中,但我现在有点困惑。这是sn-p的代码:

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,我认为它实际上应该返回指向它已将文件映射到的内存的指针。我当然试过检查明显的东西,文件大小或文件描述符没有任何问题。我敢打赌,我在这里遗漏了一些明显的东西,但我现在看不到。非常感谢您的帮助。

【问题讨论】:

  • 你可以尝试用 C 语言做同样的事情,然后在调试器中查看汇编代码吗?
  • 我听从了您的建议,并意识到我在参数的顺序上犯了一个错误。 RSI 应该是 RDI,反之亦然。非常感谢:)
  • 我已经添加了一个更正的答案。

标签: macos assembly x86-64


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多