os x 汇编程序中的 chdir 系统调用
chdir syscall in os x assembler
我试图确保我在 OS X 汇编语言中正确使用系统调用。我正在使用 NASM,下面的示例是我可以创建的重现问题的最短程序:
1 section .data
2 path db "/Users/querist",0x00
3 section .text
4 global start
5
6 start:
7 mov rax, 0x0200000b ; System call chdir = 12
8 mov rdi, path ; address of path string
9 sub rsp, 16 ; add space to stack for local variables
10 syscall ; Invoke the kernel
11 mov rdi, rax ; save return code from previous function
12 mov rax, 0x02000001 ; System call number for exit = 1
13 syscall ; Invoke the kernel
我知道目录更改仅适用于程序本身的进程,因此它不会更改我正在使用的命令 shell 中的工作目录。我实际上试图创建一个目录作为测试,但 chdir 调用失败,错误代码为 78,表示 "configuration error".
目标目录存在,而且是我的用户目录,所以我有访问权限。如果我尝试使用相对路径(例如“..”),我会收到相同的错误代码。
我可以使用相对或绝对路径的系统调用创建目录,但 chdir 调用不起作用。
此外,如何在不链接 c 库的情况下获取具有当前路径名的字符串?
谢谢
看来,在这种情况下,这确实只是错别字和生病看不清发生了什么的问题。我现在觉得够尴尬了。
已更正,工作代码:
1 section .data
2 path db "/Users/querist",0x00,0x00
3 section .text
4 global start
5
6 start:
7 mov rax, 0x0200000c ; System call chdir = 12
8 lea rdi, [rel path] ; address of path string
9 sub rsp, 16 ; add space to stack for local variables
10 syscall ; Invoke the kernel
11 mov rdi, rax ; save return code from previous function
12 mov rax, 0x02000001 ; System call number for exit = 1
13 syscall ; Invoke the kernel
我试图确保我在 OS X 汇编语言中正确使用系统调用。我正在使用 NASM,下面的示例是我可以创建的重现问题的最短程序:
1 section .data
2 path db "/Users/querist",0x00
3 section .text
4 global start
5
6 start:
7 mov rax, 0x0200000b ; System call chdir = 12
8 mov rdi, path ; address of path string
9 sub rsp, 16 ; add space to stack for local variables
10 syscall ; Invoke the kernel
11 mov rdi, rax ; save return code from previous function
12 mov rax, 0x02000001 ; System call number for exit = 1
13 syscall ; Invoke the kernel
我知道目录更改仅适用于程序本身的进程,因此它不会更改我正在使用的命令 shell 中的工作目录。我实际上试图创建一个目录作为测试,但 chdir 调用失败,错误代码为 78,表示 "configuration error".
目标目录存在,而且是我的用户目录,所以我有访问权限。如果我尝试使用相对路径(例如“..”),我会收到相同的错误代码。
我可以使用相对或绝对路径的系统调用创建目录,但 chdir 调用不起作用。
此外,如何在不链接 c 库的情况下获取具有当前路径名的字符串?
谢谢
看来,在这种情况下,这确实只是错别字和生病看不清发生了什么的问题。我现在觉得够尴尬了。
已更正,工作代码:
1 section .data
2 path db "/Users/querist",0x00,0x00
3 section .text
4 global start
5
6 start:
7 mov rax, 0x0200000c ; System call chdir = 12
8 lea rdi, [rel path] ; address of path string
9 sub rsp, 16 ; add space to stack for local variables
10 syscall ; Invoke the kernel
11 mov rdi, rax ; save return code from previous function
12 mov rax, 0x02000001 ; System call number for exit = 1
13 syscall ; Invoke the kernel