[英]OSX gettimeofday syscall on x86_64 seems to not work
我正在使用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
根據API,您需要指出:
1)RDI到timeval結構:
_STRUCT_TIMEVAL
{
__darwin_time_t tv_sec; /* seconds */
__darwin_suseconds_t tv_usec; /* and microseconds */
};
DarwinTime是QWORD,DarwinSuSeconds是DWORD。
2)RSI到時區結構。
如果您不喜歡它的輸出,只需將其指向2xQWORD暫存緩沖區即可。
3)RDX到mach_absolute_time
結構
這是一個1xQWORD緩沖區
將上面的RSI,RDX,RDI之一設置為0x0而不是指針可能會被拒絕,因為它會觸發內部異常。 (檢查返回值是否為-EFAULT
。)
還要注意,POSIX不建議使用gettimeofday
,而使用clock_gettime
(具有秒/納秒的時間結構),因此您可能要改用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.