실행 시 시스템 호출을 하지 않는 Unix 명령이 있습니까?

실행 시 시스템 호출을 하지 않는 Unix 명령이 있습니까?

나는 항상 그것이 있었는지 궁금했습니다.유닉스 명령이로 인해 어떤 문제도 발생하지 않습니다.체계 부르다. 예를 들어, 고려해 보면ls또한 다음과 같은 시스템 호출을 많이 사용합니다.open, read,write. 우리는 사용strace 이러한 호출을 찾는 명령입니다.

답변1

/bin/true그리고 /bin/false필요한 것 이외의 시스템 호출을 할 필요가 없습니다 exit(2). (GNU true 및 false는 동적으로 링크된 ELF 실행 파일이므로 일반적인 상용구 시작을 얻게 됩니다.)

asm으로 프로그램을 작성하고 그 프로그램에서 돌아가 _start거나 실행을 계속하려고 하면 실행이 매핑되지 않은 페이지로 점프할 때 세그폴트가 발생합니다. 그래서 당신은 기술적으로할 수 있는전화는 피하세요 exit(). 하지만 그럴 가치는 없습니다. :피

true(1)가장 간단한 구현 은 빈 파일이라는 것을 읽었을 것입니다 . 이는 쉘에서 호출될 때만 작동합니다.

touch true
chmod 755 true
./true
echo $?
 0
strace ./true
 write(2, "strace: exec: Exec format error\n", 32) = 32
 exit_group(1)

자신만의 최소 구현을 만들고 싶다면 trueamd64에서 다음을 수행할 수 있습니다.

cat > exit64.s <<EOF
    .section .text
    .globl _start
    _start:
            xor %edi, %edi
            mov $231, %eax  #  exit(0)
            syscall

    #       movl $1,%eax    # 32bit int80 can call the 32bit ABI system calls from long mode
    #       int $0x80
EOF

as exit64.s -o exit64.o && ld exit64.o -o exit64
strace ./exit64 
 execve("./exit64", ["./exit64"], [/* 69 vars */]) = 0
 exit_group(0)                           = ?
 +++ exited with 0 +++
file exit64
 exit64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

GNU와 달리 true이것은 --help--version!를 지원하지 않습니다. (예를 들어 command true --version내장된 쉘을 건너뜁니다.)

당신은 또한 볼 수 있습니다Linux용 아주 작은 ELF 실행 파일을 만드는 방법에 대한 회오리바람 튜토리얼이것이 깔끔하다고 생각한다면.

답변2

아니요.

언제든지 이와 같은 명령을 작성할 수 있지만 입력이 필요하지 않고 출력도 생성되지 않습니다. sleep(1)시간의 흐름을 감지하기 위해 시스템 호출 도 사용해야 했습니다.

편집하다: 금지된 메모리에 쓰기를 시도하여 종료하는 것 외에는 아무것도 수행하지 않는 순수 어셈블러 프로그램입니다 SIGSEGV.

관련 정보