映画『好きになるその瞬間を。~告白実行委員会~』第3弾本予告「今好きになる。-triangle story-」榎本虎太朗(CV:花江夏樹)Ver.
アニメ映画『好きになるその瞬間を。~告白実行委員会~』(2016)
青春です。
実行ということで、実行ファイルをbzexeで圧縮してみます。
まず適当にプログラム作ります。
takk@deb9:~$ cat t.c #include <stdio.h> int main() { puts("Hello"); } takk@deb9:~$
ビルドします。
takk@deb9:~$ gcc t.c
実行ファイルa.outができました。
takk@deb9:~$ ls -l 合計 16 -rwxr-xr-x 1 takk takk 8624 3月 8 19:54 a.out -rw-r--r-- 1 takk takk 50 3月 8 19:54 t.c takk@deb9:~$
実行できるか確認してみましょう。
takk@deb9:~$ ./a.out Hello
ではa.outをbzexeで圧縮します。
takk@deb9:~$ bzexe a.out a.out: 3.369:1, 2.375 bits/byte, 70.32% saved, 8624 in, 2560 out. takk@deb9:~$
a.outは置き換わるので注意が必要です。
takk@deb9:~$ ls -l 合計 20 -rwxr-xr-x 1 takk takk 3214 3月 8 19:54 a.out -rwxr-xr-x 1 takk takk 8624 3月 8 19:54 a.out~ -rw-r--r-- 1 takk takk 50 3月 8 19:54 t.c takk@deb9:~$
a.out~が元の実行ファイルで、a.outが自己解凍付き実行ファイルです。
fileでどのようなファイルかチェックしてみましょう。
takk@deb9:~$ file a.* a.out: POSIX shell script executable (binary data) a.out~: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=41b83ea95a5fb5f9c1c6f5cc9b50a26250c0ea00, not stripped takk@deb9:~$
元ファイルであるa.out~は当然ELFですが、生成されたa.outはなんとshellスクリプトのようです。
内容を確認してみます。
takk@deb9:~$ cat -n a.out | head -22 1 #!/bin/sh 2 skip=23 3 set -C 4 umask=`umask` 5 umask 77 6 tmpfile=`tempfile -p gztmp -d /tmp` || exit 1 7 if /usr/bin/tail -n +$skip "$0" | /bin/bzip2 -cd >> $tmpfile; then 8 umask $umask 9 /bin/chmod 700 $tmpfile 10 prog="`echo $0 | /bin/sed 's|^.*/||'`" 11 if /bin/ln -T $tmpfile "/tmp/$prog" 2>/dev/null; then 12 trap '/bin/rm -f $tmpfile "/tmp/$prog"; exit $res' 0 13 (/bin/sleep 5; /bin/rm -f $tmpfile "/tmp/$prog") 2>/dev/null & 14 /tmp/"$prog" ${1+"$@"}; res=$? 15 else 16 trap '/bin/rm -f $tmpfile; exit $res' 0 17 (/bin/sleep 5; /bin/rm -f $tmpfile) 2>/dev/null & 18 $tmpfile ${1+"$@"}; res=$? 19 fi 20 else 21 echo Cannot decompress $0; exit 1 22 fi; exit $res takk@deb9:~$
ファイルの先頭から22行目までは、bashのスクリプトとなっており、それ以降に圧縮されたデータがバインドされているようです。
おっと忘れてました。圧縮したa.outが実行できることを確認します。
takk@deb9:~$ ./a.out Hello takk@deb9:~$
問題ないですね。
コメント