【发布时间】:2015-04-15 01:37:59
【问题描述】:
我正在使用 64 位代码通过 syscall 指令调用 gettimeofday。
我无法返回任何结果,并且通过 Dtrace 被告知调用没有错误,但我从调用中返回的寄存器是垃圾。
我执行以下操作:
lea rdi, [rel timeval] ;buffer for 16bytes
mov rsi, 0 ;no need of timezone
mov rax, 0x2000074 ;gettimeofday
syscall
返回时 rax 既不是 0 也不是 -1,缓冲区永远不会得到任何数据。
请有人检查一下,看看他们是否能接到工作电话。我不知道发生了什么。
最好的问候
克里斯
ps 这是我刚刚尝试的示例代码,它只返回 0。
SECTION .text
global _main
_main:
lea rdi, [rel buffer]
mov rsi, 0
mov rax, 0x2000074
syscall
mov rdi, [rel buffer]
mov rax, 0x2000001
syscall
SECTION .data
buffer:
times 16 db 0
【问题讨论】:
-
你能发布你用来编译这个的命令以防万一吗?
-
对不起,应该阅读的人:rdi、rsi 和 rax!我只是在这里打错了,代码确实使用了rdi、rsi和rax!
-
这是我使用 NASM 编译的代码和平的一部分,我使用它来编译:nasm -f macho64 main.nasm,然后链接:ld -macosx_version_min 10.6 -o main -e _main main.o
-
如果有人想查看完整代码,请在此处获得:github.com/vygr/Asm-Kernel,我的最后一个签入条目禁用了非工作调用,请随时取消注释并自己尝试。
-
有问题的代码在文件 sys/task_sleep 中,该代码的第一部分试图进行 gettimeofday 调用。它无法返回任何东西。我正在使用 NASM 'altreg' 设置,以便注册 rdi == r7、rsi ==r6、rax == r0。系统调用宏可以在 syscall.inc 中找到。
标签: macos x86-64 system-calls gettimeofday