[TUHS] /bin/true (was basic tools / Universal Unix)

Dan Cross crossd at gmail.com
Mon Oct 23 11:11:25 AEST 2017


On Sun, Oct 22, 2017 at 7:00 PM, Doug McIlroy <doug at cs.dartmouth.edu> wrote:
>> macOS requires you to have a data section aligned to 4K, even if you
>> don't use it. The resulting binary is a little over 8K; again, mostly
>> zeros.
>
> Not quite. The classic empty executable file for /bin/true works
> on OS X. That is not just a clever trick;it's a natural consequence
> of Kernighan's ancient prrecept: do nothing gracefully. Conceivably
> the 4K data section is, too--if the page has no physical presence
> until it is accessed.

Oh sure! Sorry; the mention of the 4K data section was meant to be
orthogonal to the empty-shell file thing. However, one still cannot
'exec' an empty shell script, even on OS X:

: hurricane; mkdir t
: hurricane; cd t
/Users/dcross/t
: hurricane; touch true
: hurricane; cat>dotrue.c
int main() { execl("./true", "true", 0); write(2, "Boo\n", 4); return 1; }
: hurricane; chmod +x ./true
: hurricane; ./true
: hurricane; echo $?
0
: hurricane; make dotrue
cc     dotrue.c   -o dotrue
dotrue.c:1:14: warning: implicit declaration of function 'execl' is
invalid in C99 [-Wimplicit-function-declaration]
int main() { execl("./true", "true", 0); write(2, "Boo\n", 4); return 1; }
             ^
dotrue.c:1:42: warning: implicit declaration of function 'write' is
invalid in C99 [-Wimplicit-function-declaration]
int main() { execl("./true", "true", 0); write(2, "Boo\n", 4); return 1; }
                                         ^
2 warnings generated.
: hurricane; ./dotrue
Boo
: hurricane; echo $?
1
: hurricane; cp /usr/bin/true .
: hurricane; ./dotrue
: hurricane; echo $?
0
: hurricane; file true
true: Mach-O 64-bit executable x86_64
: hurricane; ls -l true
-rwxr-xr-x  1 dcross  eng  17760 Oct 22 21:08 true
: hurricane; cd ..
/Users/dcross
: hurricane; rm -fr t
: hurricane;

(The system-provided /usr/bin/true is >16KB!!)

        - Dan C.


More information about the TUHS mailing list