スキップしてメイン コンテンツに移動

PHPerが一瞬でC言語をマスターする方法

CUI環境でPHPを選ぶ時というのはどういう時でしょうか。
  • PHPしかできないし俺。(あるある)
  • bashって微妙だよね・・・(どこがだよ!)
  • PHP CLIがインストールされてるから気軽に使えるじゃん(ごもっとも)
みたいな理由だと思うんですが、強烈な事してる人を見つけてしまったのでちょっとネタにさせてもらおう・・・。




そのファイルはa.outというファイルでした。
a.outという名前のファイルを作るために特別なことはいりません。
ソースを書いてみましょう。ファイル名はhello.cとしておきます。

#include <stdio.h>
void main(){
    printf("Hello world!");
}

このソースを
gcc hello.c

こうしてやると、a.outというファイルが生成されます。a.outは、gccでコンパイルした時のデフォルトのファイル名という事です。

と言うことは、元のa.outを書いた人はC言語がバリバリ書ける人という事でしょう。しかも、暗号の復号化処理という結構ややこしいことをなさっている・・・。暗号化ロジックの仕様書はものすごく退屈で、こんな実装できる訳ないよ!と本気で思っている私ですからね。

ところが、この暗号を解読する復号化キーの不具合があり(要は向こうの人がどの復号化キーを設定したか忘れちゃった)、すったもんだの結果なぜか復号化プログラムのソースが私の手元に・・・。この事実を、私は「好きな文字列を復号化キーに設定して暗号の強度を上げてください」という意図で受け取ったのですが。

復号化キーを設定すべく、ソースコードを開いた私は驚愕しました。

fprintf(fp, "#!/usr/bin/php -q\n<?php ここからPHPのソースが続く・・・");

最初、なんでこんなところにPHPのシェバングがあるのか意味がわからなかったんですが、単にPHPファイルに渡す引数だけをCでごにょごにょやってファイルに書き出し。実行権限付けてsystem関数で実行するというすげぇ高度なコーディングスタイルを行なっていたんですね・・・。なるほど、これならPHPでできることならC言語に移植(だいぶ違うけど)できるな・・・。
しかし、突っ込みどころは多くて、シェバングは/usr/bin/php 一択という豪快で男気感じる一本気なところ(which phpとか女々しい)や、fchmodでしれっと実行権限をつけるあたりは、トライ&エラーの跡が見られます。

こういう手法を用いれば、メリットもあります。たとえば
  • プロプラの時、ソースコードを隠蔽できる(Cのソースが単純なのですぐ突破されそうですが)
  • 何をしているかあまり見られたくない時(何かのキーを内包する場合)
  • 誤ってソースを改変される事を防ぐ
くらいでしょうか。
C言語のくせに、PHPのライブラリを要求したりする時点で怪しまれますけれどね。

PHPならもう完璧。でもC言語はからっきし。
世の中にそんな偏ったスキルセットを持つ人はそういないと思いますが、もしそんな人がいれば、PHPでできることならC言語でもできる最強のソースを公開します。

#include 

void main(void){
    system("php -r \"echo \\\"hello world\\\";\"");
}

こうすれば、PHP CLIでできる事はだいたい出来るのではないでしょうか。クォートのエスケープに少々気を取られがちになりますが、PHPのソースコードをコンパイルする事ができます(してねーし)。

こういう回りくどい事をわざとやるということは、意外とちゃんとわかってないとできないものもあるので、技術を磨くという意味ではやってみてもいいんじゃないでしょうか。正月、テレビに飽きたらどうでしょう?


see also:
php-mcryptがyumでインストールできないときに幸せになる方法
そろそろ真面目に自動テストしよう
PHPのmysql系関数のまとめ
さくらインターネットの .mailfilter にハマる


コメント

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。