gpt4 book ai didi

linux - Linux 程序集中的文件权限

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:17 25 4
gpt4 key购买 nike

我正在尝试获取有关文件权限的信息。我正在使用 sys_access 系统调用。这是我的代码片段:

mov eax, 33 
mov ebx, fileName
mov ecx, 1
int 80h

cmp eax, 0
jl .error

如果 eax 是 -1 则有错误,我没有得到,但我需要检查文件的所有权限(所有者、组、其他)。我该怎么做?

最佳答案

您可以使用内核函数sys_newstat(第106 - 查看this table)获取文件权限。结构 stat 是一个永无止境的恐怖,但以下示例至少适用于我的 Debian Wheezy 64 位(NASM、32 位和 64 位模式):

SECTION .data

filename db '/root' ; Just an example, can be replaced with any name
filename_len equ $ - filename ; Length of filename
db 0 ; Terminator for `Int 80h / EAX = 106`
perm_out db 'Permissions: '
perm db 'drwxrwxrwx'
perm_len equ $ - perm ; Index of last character in `perm`
lf db 10
perm_out_len equ $ - perm_out ; Length of `Permissions: ...\n`

SECTION .bss
stat resb 256 ; Way too much, but size is variable depending on OS

SECTION .text
global _start

_start:

mov eax,4 ; sys-out
mov edx,filename_len ; length of string to print
mov ecx,filename ; Pointer to string
mov ebx,1 ; StdOut
int 0x80 ; Call kernel

mov eax,4 ; sys-out
mov edx,1 ; Length of string to print
mov ecx, lf ; Pointer to string
mov ebx,1 ; StdOut
int 0x80 ; Call kernel

mov eax, 106 ; sys_newstat
mov ebx, filename ; Pointer to ASCIIZ file-name
mov ecx, stat ; Pointer to structure stat
int 80h

test eax, eax
jz .noerr
mov eax,1 ; sys_exit
mov ebx,1 ; Exit code, 1=not normal
int 0x80 ; Call kernel
.noerr:

movzx eax, word [stat + 8] ; st_mode (/usr/include/asm/stat.h)
mov ebx, perm_len

; rwx bits
mov ecx, 9
.L1:
sub ebx, 1
shr eax, 1
jc .J1
mov byte [perm + ebx], '-'
.J1:
loop .L1

; directory bit
sub ebx, 1
shr eax, 6
jc .J2
mov byte [perm + ebx], '-'
.J2:

mov eax,4 ; sys-out
mov edx,perm_out_len ; Length of string to print
mov ecx,perm_out ; Pointer to string
mov ebx,1 ; StdOut
int 0x80 ; Call kernel

mov eax,1 ; sys_exit
mov ebx,0 ; Exit code, 0=normal
int 0x80 ; Call kernel

关于linux - Linux 程序集中的文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com