A.I.C.O. -Incarnation- | Teaser [HD] | Netflix
アニメ『A.I.C.O. -Incarnation-』
本物のようで本物でない。前回からやってるa.outファイルのようです。ELFのようでELFでない。
今回は前回の続きで、圧縮実行ファイルを自作してみます。
プログラムはこれです。ビルドしておきます。
takk@deb9:~$ cat t.c #include <stdio.h> int main() { puts("Hello"); } takk@deb9:~$ gcc t.c takk@deb9:~$ ls -l 合計 16 -rwxr-xr-x 1 takk takk 8624 3月 10 19:55 a.out -rw-r--r-- 1 takk takk 50 3月 10 18:13 t.c takk@deb9:~$
どの圧縮コマンドを使いましょうか。ファイルサイズを比較するため圧縮前実行ファイルを複写しておきます。
takk@deb9:~$ cp a.out b.out takk@deb9:~$ cp a.out c.out takk@deb9:~$ ls -l 合計 40 -rwxr-xr-x 1 takk takk 8624 3月 10 19:55 a.out -rwxr-xr-x 1 takk takk 8624 3月 10 19:56 b.out -rwxr-xr-x 1 takk takk 8624 3月 10 19:57 c.out -rw-r--r-- 1 takk takk 50 3月 10 18:13 t.c takk@deb9:~$
gzip bz2 xzそれぞれのコマンドで圧縮して、サイズを比較。
takk@deb9:~$ gzip a.out takk@deb9:~$ bzip2 b.out takk@deb9:~$ xz c.out takk@deb9:~$ ls -l 合計 16 -rwxr-xr-x 1 takk takk 2436 3月 10 19:55 a.out.gz -rwxr-xr-x 1 takk takk 2560 3月 10 19:56 b.out.bz2 -rwxr-xr-x 1 takk takk 2116 3月 10 19:57 c.out.xz -rw-r--r-- 1 takk takk 50 3月 10 18:13 t.c takk@deb9:~$
xzが効率化が良さそうなので、xzで圧縮したファイルを対象とします。
解凍するにはxzcatで標準出力すればよいです。
takk@deb9:~$ xzcat c.out.xz > c.out takk@deb9:~$ file c.out c.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:~$
exe.shというファイル名で展開スクリプトを書きます。
takk@deb9:~$ cat exe.sh #!/bin/bash xzcat c.out.xz > /tmp/c.out /tmp/c.out takk@deb9:~$
実行権限をつけます。
takk@deb9:~$ chmod 755 exe.sh takk@deb9:~$ ls -l exe.sh -rwxr-xr-x 1 takk takk 43 3月 10 20:09 exe.sh takk@deb9:~$
実行してみます。
takk@deb9:~$ ./exe.sh ./exe.sh: 行 3: ./c.out: 許可がありません takk@deb9:~$
生成したc.outに実行権限をつけるのを忘れてましたので追加します。
takk@deb9:~$ cat exe.sh #!/bin/bash xzcat c.out.xz > /tmp/c.out chmod 755 /tmp/c.out /tmp/c.out takk@deb9:~$
実行できることを確認。
takk@deb9:~$ ./exe.sh Hello takk@deb9:~$
次は、exe.shと圧縮ファイルc.out.xzを結合します。
takk@deb9:~$ ls -l 合計 12 -rwxr-xr-x 1 takk takk 2116 3月 10 19:57 c.out.xz -rwxr-xr-x 1 takk takk 72 3月 10 21:43 exe.sh -rw-r--r-- 1 takk takk 50 3月 10 18:13 t.c takk@deb9:~$
catで結合できます。
takk@deb9:~$ cat exe.sh c.out.xz > c.out takk@deb9:~$
結合したファイルのスクリプト部分に、圧縮データのみを抽出するための、tailコマンドと、シェルスクリプトを終了するためのexitを追加しておきます。
takk@deb9:~$ head c.out #!/bin/bash tail -n +7 c.out > c.out.xz xzcat c.out.xz > /tmp/c.out chmod 755 /tmp/c.out /tmp/c.out exit
では、c.outに実行権限をつけて実行してみます。
takk@deb9:~$ chmod 755 c.out takk@deb9:~$ ./c.out xzcat: c.out.xz: Unexpected end of input Hello takk@deb9:~$
実行できました。
xzcatでUnexpected end of inputが出てますが、これは次回に持ち越します。
コメント