簡體   English   中英

x86_64上的OSX gettimeofday syscall似乎不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM