os x汇编程序中的chdir系统调用

时间:2016-03-10 01:16:28

标签: macos assembly x86-64

我正在尝试确保在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,表示"配置错误"。

目标目录存在且它是我的用户目录,因此我有权访问它。如果我尝试使用相对路径(例如" .."),我会收到相同的错误代码。

我可以使用相对路径或绝对路径使用系统调用创建目录,但chdir调用不起作用。

另外,如何在不链接c库的情况下获取具有当前路径名的字符串?

感谢

1 个答案:

答案 0 :(得分:0)

在这种情况下,似乎真的只是一个错别字而且病得太重而无法看到发生了什么。我现在觉得很尴尬。

已更正,正在运行的代码:

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