11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

D言語くんAdvent Calendar 2016

Day 13

perlのコードになっているgifファイル

Last updated at Posted at 2016-12-12

perlのコードになっているgifファイル

去年はD言語のコードになっているepsファイルを書いたのでよろしくな.

環境

  • This is perl 5, version 24, subversion 0 (v5.24.0) built for x86_64-linux-thread-multi
  • Version: ImageMagick 6.9.6-6 Q16 x86_64 2016-12-02 http://www.imagemagick.org
  • DMD64 D Compiler v2.072.1

gifファイル

dman_3.gif
qiitaの環境がよくわかりませんが,アップロード時にファイルに変更があるかもしれないので,gifファイルを生成するD言語のソースも書きました.

dman.d
import std.stdio,std.base64;void main(){writeln("GIF89a#\x00X\x00\xf1\x01\x00\x00\x00\x00\xff\xff\xff\xff$$\x00\x00\x00!\xfe%\n;use MIME::Base64;BEGIN{$s=<<'END';");write(cast(string)Base64.decode("ACwAAAAAIwBYAAAC/oyPqcvdAJ1UEARr8JQ65j1pFyKCSSmW5oGS69J+L8xe1UzLmTpXqoezOYAvIsO4QR55D+YSpOQ4WdPhNAplAn3c0A8DEYjH41uTBBYAyOxy1LNVt+dipSVed6/p6pM5U1bHwtdHZbSnhkIWVrbjOFinKHixKPRIGbnDmLKIkpbJ9YfZ6DcaigjGSOqHmljR6NPG8yrnYxPBxaYVticaKrd6Ehh8y6sLMzxp2HtMkVzonEcMKK0sXA0NCTwNiZhNvW197f3z/E2CXY593l15HX6VHg0/JI++7sTsru3NTt0vid4RfPPIPSB4TyCycOJaccPUr2GyWfqaJUTlxxwxlofffs1Rt80joUQFR/IRxc+krF4lVbrhxnEkLXHt6Ih8CPGUKpsHGbrEQimiSaBBP8rK5MXmyioUdOoMQqEpVDQwmHqpOtUSVqhYiFqREoSo161gi1gdWyqJ1RNZejBFG7Ws269c6YbdxcpKhyc1dLB1hIRIjL81vlzq60Iq2zdxGyM+4jix5ByEK/s19CDy47Gh9FYpAAAh/v8K"));write(q"[END
$_=q[print q[import std.stdio,std.base64;void main(){writeln("GIF89a#\x00X\x00\xf1\x01\x00\x00\x00\x00\xff\xff\xff\xff$$\x00\x00\x00!\xfe%\n;use MIME::Base64;BEGIN{$s=<<'END';");write(cast(string)Base64.decode("].encode_base64($s,'').'"));write(q"[END
$_=q['.$_.'];eval};]"~"#\x00;");}';exit];eval};]"~"#\x00;");}

これをdmdでコンパイルして実行すると,標準出力にバイナリが出力されるので,それをファイルに保存すれば,perlのコードになっているgifができます.

dmd dman.d
./dman > dman.gif
file dman.gif
perl dman.gif

perl dman.gifで標準出力に何が出力されましたか?
上記のD言語のソースと全く同じものが出力されたと思います.
もしもエラーが出たり一致しなかった場合は,ごめんなさい,僕がコード生成をミスったか,windowsのCR問題か,落としたgifが間違ってるか,その他環境の差異かのどれかだと思います.

なので,このgifファイルは,「『このgifファイルを出力するD言語のソース』を出力するperlスクリプト」になっているgifファイルになります.

詳しい説明は面倒なので後で追記します.
興味のある人は適当なテキストエディタでdman.gifを覗いてみてください.

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?