我想寫一個簡單的程序來打開一個二進制文件並讀取每個字節。我試圖做到這一點使用的Android設備使用此係統調用(https://android.googlesource.com/platform/bionic/+/cd58770/libc/SYSCALLS.TXT)與後續代碼用ARM程序集讀取二進制文件
...
ldr r0, =binaryfile
mov r1, #2
mov r7, #5
svC#0
loop:
ldr r0,=Handle
ldr r0,[r0]
ldr R1,=Array
mov R2,#80
mov r7,#3 @read syscall
svC#0
...
Handle: .skip 4
Array: .skip 80
binaryfile: .asciz "file.bin"
.end
但開放的系統調用後,手柄的值總是0xfffffffe
什麼建議嗎?
在'strace'下運行您的程序,記錄它所做的所有系統調用。這是一種簡單的方法,可以在您傳遞錯誤參數的地方發現錯誤。順便說一下,失敗的系統調用總是返回'-ERRNO',所以你可以查看errno = -2的含義。也許EFAULT,ENOENT或其他。 (或者只是使用strace) –
等一下,你在哪裏將'open(2)'返回值存儲到'Handle'中?它看起來像你在'r0'中進入循環。爲什麼不把它一直保存在註冊表中?你也可以把'ldr r0,= Handle'從循環中提出來。 (檢查ABI以確保'svc#0'持有除返回值以外的所有寄存器,但大多數平臺都以這種方式工作。) –