node 上的获取当前时间是调用系统的 api 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wszgrcy
V2EX    Node.js

node 上的获取当前时间是调用系统的 api 吗?

  •  
  •   wszgrcy 2020-01-22 21:14:21 +08:00 via Android 8763 次点击
    这是一个创建于 2173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然 js 不是直接跑在系统里的,但是还是想知道点 node 和系统之间的关系,比如获得时间是不是也是调用的系统 api,和在 windows 下用 ffi 调用它的 api 是否能获得相同的结果?有这方面的大佬吗

    8 条回复    2020-01-23 03:27:54 +08:00
    no1xsyzy
        1
    no1xsyzy  
       2020-01-22 21:55:17 +08:00
    你除了调用系统 API 还能怎么做?
    1、直接和硬件沟通读 CMOS 时间;
    2、网络时间。

    1 的话,我不知道怎么操作,但结果和系统时间一样,因为系统时间也就是 CMOS 时间…… 除非被 LD_PRELOAD 之类替换掉 syscall ?
    2 的话,其中包含 “需要联网” 这一前提和 “通过 NTP 协议进行了交互” 这一 side effect,应当显式指明。
    yafoo
        2
    yafoo  
       2020-01-23 00:06:51 +08:00 via Android
    @no1xsyzy 看到问题,我也在想怎么读取时间,你的回答一下打开了思路,貌似只能调用系统 api
    monsterxx03
        3
    monsterxx03  
       2020-01-23 00:09:54 +08:00 via iPhone   1
    你写个程序在死循环里不停取时间,然后 strace 看它用了什么 syscall 就知道了
    azh7138m
        4
    azh7138m  
       2020-01-23 00:31:31 +08:00
    是的,见 https://sourcegraph.com/github.com/v8/v8@4b9b23521e6fd42373ebbcb20ebe03bf445494f9/-/blob/src/base/platform/time.cc?utm_source=share#L306:7
    posix 下用了 gettimeofday
    win 下会分两种情况做讨论
    都会用到 GetSystemTimeAsFileTime
    azh7138m
        5
    azh7138m  
       2020-01-23 00:34:27 +08:00
    = = 我应该去掉小尾巴的
    不过都在这个文件里面,上下翻一下就行了
    JSDate 最后应该是调到这个地方的
    yangkeao
        6
    yangkeao  
       2020-01-23 01:56:14 +08:00 via Android
    @monsterxx03 clock_gettime 很巧的是大部分时候 strace 看不见,因为时间相关可以用 vDSO,而不用真的 syscall。

    既然是 vDSO,那么它就能在用户态实现。实现上根据要求的精度不同会有差异,其中之一落到 rdtsc 指令
    yangkeao
        7
    yangkeao  
       2020-01-23 02:01:37 +08:00 via Android   1
    至于是如何调用的,就得具体情况具体分析。如果通过 glibc 调用 clock_gettime 函数,那么会走 vDSO。

    也可以像 go runtime 做的那样,直接解析 auxv、解析符号、调用 vdso。

    也可以直接 syscall 225 (大概是这个数,不确定),这样就不是通过 vdso 的,strace 就能看见。当然,在一些极端情况下,vdso 会 fallback 到系统调用上。

    node 是啥情况可能得自己探索一番,也无外乎这几样了。

    (最近了解了一些这方面知识,因为在做一个运行时注入程序修改时间的工具用来做 chaos )
    ysc3839
        8
    ysc3839  
       2020-01-23 03:27:54 +08:00 via Android
    @azh7138m 想问一下“win 下会分两种情况做讨论”具体是什么情况?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     842 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 19:38 PVG 03:38 LAX 11:38 JFK 14:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86