シェルスクリプトをコンパイルできるshcで遊んでみた
使うことはないかもしれない。でも面白いです。
shcをインストール
$ sudo apt-get install shc
なかったらソースをダウンロードしてコンパイルしてください。
$ wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz $ tar xvzf shc-3.8.7.tgz $ cd shc-3.8.7/ $ make
shcでコンパイル
テストで /usr/bin/ldd を使用。 なんで lddってshell script ってイメージがないんだろう。
$ file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script text executable
$ cp -p /usr/bin/ldd .
$ ./shc -v -r -T -f ./ldd
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc ./ldd.x.c -o ./ldd.x
shc: strip ./ldd.x
shc: chmod go-r ./ldd.x
$ file ./ldd.x
./ldd.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
$ ./ldd.x /bin/ls
linux-vdso.so.1 => (0x00007fff0d9ff000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f2ed8878000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f2ed8670000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f2ed8467000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2ed80d3000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2ed7ecf000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2ed8a9f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2ed7cb0000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f2ed7aab000)foo.x.c というCのソースができるので、中身を眺めてみるのもオツなものです。