私はいつもそれがあったかどうか疑問に思いました。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)
独自の最小実装を作成したい場合は、true
amd64で次のことを実行できます。
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実行可能ファイルを作成する方法についての旋回風チュートリアルこれがきれいだと思うなら。