Как мне записать в файлы в сборке ARM? - PullRequest
0 голосов
/ 10 июля 2020

Я изучаю сборку ARM на моем raspberry pi, и я пытаюсь записать в файл с именем «user_data.txt». Я знаю, как создать файл, вот так ...

.data

.balign 1
file_name: .asciz "user_data.txt"

.text

.global _start
_start:
    MOV R7, #8
    LDR R0, =file_name
    MOV R1, #0777
    SWI 0
_end:
    MOV R7, #1
    SWI #0

... но, как я уже сказал, я не могу понять, как я буду писать в этот файл. Я просмотрел другие руководства, но ни один из них не объяснял, что делает каждая строка. Я понимаю, что переместил бы 4 в R7, чтобы вызвать системный вызов sys_write, но как мне сообщить ARM имя файла, в который я хочу писать?

Может ли кто-нибудь дать код, который ясно показывает и объясняет какой-то ARM, который записывает в файл?

Спасибо,

  • primecubed

1 Ответ

1 голос
/ 10 июля 2020

Итак, вам нужен код:

.data

.balign 1
file_name: .asciz "user_data.txt"

.text

.global _start
_start:
    MOV R7, #8
    LDR R0, =file_name
    MOV R1, #0777
    SWI 0
    MOV R7, #4         ;write(int fd, void* buf, int len)
    LDR R1, =file_name ;buf
    MOV R2, #9         ;len
    SWI 0
    MOV R7, #6         ;close(int fd)
    SWI 0
_end:
    MOV R7, #1
    SWI #0

Это будет (для простоты) записать 9 символов file_name (user_data) в файл и закрыть его. Обратите внимание, что R0 всегда содержит fd.

Справочные страницы (https://linux.die.net/man/2/creat, https://linux.die.net/man/2/write) и эта таблица (https://syscalls.w3challs.com/?arch=arm_thumb) - полезные ресурсы, к которым я часто обращаюсь.

...