NASM - Как установить разрешения при создании файлов или каталога - PullRequest
1 голос
/ 06 апреля 2020

Я следую этому руководству, Урок 22 * ​​1002 *.
Я делаю это на Ubuntu 19.10 x86_64 с NASM версии 2.14.02.
Предполагается создать файл readme.txt и установите для него разрешения 777 (-rwxrwxrwx).

    mov     ecx, 0777           ; set all permissions to read, write, execute
    mov     ebx, filename       ; filename we will create
    mov     eax, 8              ; invoke SYS_CREAT (kernel opcode 8)
    int     80h                 ; call the kernel

Я использую команду compile / link, как указано в приведенном выше руководстве:

; Compile with: nasm -f elf create.asm
; Link with (64 bit systems require elf_i386 option): ld -m elf_i386 create.o -o create
; Run with: ./create

При запуске программы создания, файл создан, но разрешения не 777, а:

-r----x--t 1 cptam cptam    0 Apr  5 21:41 readme.txt

Я не могу понять, почему 0777 становится, если я не ошибаюсь, 1510. Может ли кто-нибудь объяснить мне, как правильно установить разрешения в файле?

Спасибо!

1 Ответ

3 голосов
/ 06 апреля 2020

В отличие от C, только 0-префикс не подразумевает восьмеричной константы в NASM

Следовательно, ecx имеет значение 0o1411 (777 в десятичный) до системного вызова creat. Вы можете решить эту проблему с помощью восьмеричного спецификатора в константе режима:

    mov     ecx, 0o777          ; set all permissions to read, write, execute
...