這是一種替代解決方案。如無代表噪聲所示,看起來你的代碼是正確的;我得到了和你一樣的結果。
儘管如此,替代解決方案可能是使用gettimeofday系統調用;它確實返回時代;只要這是你的目標。互聯網上的一些評論表明,時間和gettimeofday可能使用不同的來源;所以gettimeofday可能並不準確。
我已經嘗試使用時間()與空和非空指針和所有結果分別在r0返回0xffffffda。
1 /*
2 David @InfinitelyManic
3 http://stackoverflow.com/questions/39820523/arm-assembly-time-system-call-unexpected-values
4
5 $ uname -a
6 Linux raspberrypi 4.4.21-v7+ #911 SMP Thu Sep 15 14:22:38 BST 2016 armv7l GNU/Linux
7
8 $ cat /etc/os-release
9 PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
10
11 $ less /usr/share/gdb/syscalls/arm-linux.xml
12 <syscall name="time" number="13"/>
13
14 arm/EABI swi 0x0 r7 r0
15
16 gcc -g stuff.s -o stuff
17 */
18
19 .bss
20 .data
21 fmt: .asciz "%lu\n"
22 t: .zero 8
23 .text
24 .global main
25 .include "mymac.s"
26
27 main:
28 nop
29 ldr r9,=t
30
31 bl _time0
32 mov r1, r0
33 bl write
34
35 bl _time1
36 ldr r1, [r9]
37 bl write
38
39 exit:
40 mov r7, #1
41 svc 0
42
43 write:
44 push {r1-r3,lr}
45 ldr r0,=fmt
46 bl printf
47 pop {r1-r3,pc}
48
49 _time0:
50 push {r1-r3,lr}
51 mov r7, #13 // time
52 eor r0, r0
53 svc 0
54 pop {r1-r3,pc}
55
56 _time1:
57 push {r1-r3,lr}
58 mov r7, #78 // gettimeofday
59 ldr r0,=t
60 eor r1, r1
61 svc 0
62 pop {r1-r3,pc}
OUTPUT:
$ ./stuff
4294967258
1475617987
[-38是'-ENOSYS'](http://lxr.free-electrons.com/source/include/uapi/asm-generic/errno.h #L17),這表明可能需要查找正在運行的內核版本的_actual_適當的系統調用號碼,而不是從一個瘋狂的過期參考中猜測。 – Notlikethat
我試圖尋找有關的信息,但我沒有運氣。你如何建議我應該去尋找實際合適的系統呼叫號碼? – gshawm
下面是我找到的更精確的表示形式:https://w3challs.com/syscalls/?arch=arm_thumb – gshawm