Value of syscall_time in macOS High Sierra



我正在编写汇编-nasm程序,我想使用设备的当前时间。在 Linux 中,有一个编号为 201 的系统调用,它返回从 1970 年初开始的秒数。有谁知道macOS中相应系统调用的价值是什么?

感谢您的帮助,我已经找到了解决方案。您可以在下面找到如何加载缓冲存储的时间

苹果操作系统

load_time:
mov rax, 0x2000074
lea rdi, [rel buffer]
mov rsi, 0
syscall
ret

提供指向缓冲区的指针作为参数,以结构形式检索数据

_STRUCT_TIMEVAL {
__darwin_time_t         tv_sec;         /* seconds */
__darwin_suseconds_t    tv_usec;        /* and microseconds */
};

在 Linux 的情况下,只返回几秒钟

load_time
mov rax, 201
mov rdi, 0
syscall
mov [rel buffer], rax
ret

为了补充您的答案,我找到了一种非常简单的方法来访问秒和微秒,方法是声明:

timeval:
tv_sec  dq 0
tv_usec dq 0
timestr db "Secs: %ld and microsecs: %ld", 10, 0

执行后:

mov         rax, 0x2000074
lea         rdi, [timeval]
mov         rsi, 0          
syscall

然后,您可以按名称访问每个名称,例如打印:

lea         rdi, [timestr]     
mov         rsi, [tv_sec]
mov         rdx, [tv_usec]
call        _printf 

最新更新