【发布时间】: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,反之亦然。非常感谢:)
-
我已经添加了一个更正的答案。