作品集

作品一覧

■ x86のNOP命令(0x90)による駄洒落(作者:坂井弘亮)

以下はx86の実行ファイルの機械語コード部分のダンプである.

  31 ED 55 89  E5 83 E4 F0  8D 45 08 83  EC 04 50 FF  1.U......E....P.
  75 04 52 E8  08 00 00 00  CC*90*90*90**90*90*90*90* u.R.............
 *55*89*E5 57  56 53 83 EC  0C 8B 75 0C  8B 5D 10 85  U..WVS....u..]..

関数の末尾(CC以降)が,NOP(90)で埋められており,90 90 90 90 90 90 90 という 部分が見られる.
これは命令が無いために,CPUが命令を「くれ,くれ,くれ,...」と言っている.
そしてその後には,関数の先頭に push %ebp と mov %esp, %ebp の前半の「55 89」が あり,「ゴー!ゴー!ハック!」と言って関数が開始されている.

(この駄洒落の面白い点の解説)
関数末尾のキャッシュアラインのためのパディングのNOPでCPUがやることが無くて 「命令をくれくれくれ...」と言っており,さらにようやく関数先頭で命令を得て, 「ゴー!ゴー!ハック!」と嬉しそうに実行を開始している点が,CPUの挙動と感情を うまく掛け合わせて表現しており, そこがこの駄洒落の面白いところです

■ Linux/x86のシステムコール呼び出し(int 0x80: CD 80)による駄洒落(作者:坂井弘亮)

以下はx86の実行ファイルの機械語コードの,システムコール呼び出し部分のダンプ である.

  5C 24 14 8B  44 24 10 52  51 53 50 8B  44 24 10 F8  \$..D$.RQSP.D$..
 *CD*80*73 07  83 F8 00 7E  02 F7 D8 5B  5B 5B 5B 5B  ..s....~...[[[[[
  5B 59 5A C3  83 EC 18 FF  74 24 1C E8  A0 FF FF FF  [YZ.....t$......

システムコール呼び出しが int 0x80 で行われており,「CD 80」となっている.
これは,機械語コードのダンプなど見ずに「Cでやれ」と言っている.

(この駄洒落の面白い点の解説)
Linux/x86のシステムコール呼び出し手順(ABI)を知るためにせっかく機械語コードの ダンプを見ているのに,そのCPUに「C(言語)でやれ」と逆にツッコミを受けてしまって いる点が,この駄洒落の面白いところです

■ ICMP Echo のパケットによる駄洒落(作者:坂井弘亮)

以下は ICMP Echo のパケットの例である.

  00 66 77 88  99 AA 00 11  22 33 44 55 *08*00*45 00  .fw..... "3DU..E.
  00 54 11 20  00 00 40 01  E6 35 C0 A8  01 01 C0 A8  .T. ..@. .5......
  01 02*08*00* 22 18 A7 04  00 00 53 9B  9F 77 00 06  ...."... ..S..w..
  50 C7 08 09  0A 0B 0C 0D  0E 0F 10 11  12 13 14 15  P....... ........
  16 17 18 19  1A 1B 1C 1D  1E 1F 20 21  22 23 24 25  ........ .. !"#$%
  26 27 28 29  2A 2B 2C 2D  2E 2F 30 31  32 33 34 35  &'()*+,- ./012345
  36 37                                               67

IPパケットのため,Ethernetヘッダのタイプが「08 00」となっている.
またICMPヘッダのタイプとコードも「08 00」となっている.
これは ICMP Echo のため,受信したノードが「おや,俺?」と反応している からである.


メールは kozos(アットマーク)kozos.jp まで