OSX上的getcwd syscall问题

问题描述 投票:0回答:1

有人知道如何通过NASM在OSX中获取当前的工作目录吗? osx上无法使用syscall getcwd,而dtruss pwd返回大量的stat sys调用。但是在手册中,我找不到stat的哪个结构变量返回当前工作目录。谢谢。

macos assembly x86-64 nasm getcwd
1个回答
0
投票

这是一点迟来的答案,但是仍然可以使用2个系统调用来实现。

  1. [open_nocancel 0x2000018e(或open 0x2000005)打开当前目录的文件描述符
  2. fcntl_nocancel 0x200000196(或fcntl 0x2000005c)以读取实际路径

例如:

#define F_GETPATH 50     ; from <sys/fcntl.h>

currentDirConstant: 
db   ".",0 ; needs segment read permission  

outputPath:          
resb 1000 ; needs segment write permission

mov rdi,currentDirConstant; input path 1st argument
xor esi, esi        ; int flags 2nd argument, just use 0
xor edx, edx        ; int mode 3rd argument, just use 0
mov eax, 0x2000018e ; open_nocancel syscall number 
syscall        

mov edi,eax          ; file descriptor 1st argument of current dir from previous syscall
mov esi,F_GETPATH    ; fcntl cmd 2nd argument
mov rdx, outputPath  ; output buffer 3rd argument
mov eax, 0x200000196 ; fcntl_nocancel syscall number  
syscall
© www.soinside.com 2019 - 2024. All rights reserved.