アカウント名:
パスワード:
私が聞いた「メッセージがプログラムになっている」のは、FM-7の某コピーツール。確かBIOSから読み込まれるブート部分256byteほどがプロテクト破りに挑戦する人のメッセージになっているんだけど、それが自己書換え、へんてこなループ、未公開命令やらを巧みに使った超難読プログラムになっているという話でした。で、全部の罠を突破すると「congratulation」という文字列がバイナリに含まれているという…。そんな話が「The BASIC」誌に読者からの投稿であった記憶があります。
伝聞だし、自分で解析した訳じゃないですが、20年くらい前の話です。これが最古というわけじゃないでしょうが、少なくともそれ位の昔からはあるということですね。
char nop3[]="\220\220\220"; /* 8進数の nopコード */ int main(){ (*((void (*)())nop3))(); /* nop3のコードを実行 */ (*((void (*)())"\220\220\220"))(); /* 直接書いたマシン語を実行 */}
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
懐かしの (スコア:0)
コメントがプログラムになってるという。
Re:懐かしの (スコア:1, 興味深い)
100 'くぁwせdrftgyふじこlp;
みたいなのが延々並んでて、このREM文の中を結合して正しいマシン語に変換するブートストラップが、DATA文とかで書かれてるような奴。これもコメントに書かれたASCIIコードを実行時に変換しているので発想としては同じですな。
発祥の地ってどこなんだろ?
Re:懐かしの (スコア:2, 参考になる)
メッセージ部分がプログラム (スコア:5, 興味深い)
私が聞いた「メッセージがプログラムになっている」のは、FM-7の某コピーツール。確かBIOSから読み込まれるブート部分256byteほどがプロテクト破りに挑戦する人のメッセージになっているんだけど、それが自己書換え、へんてこなループ、未公開命令やらを巧みに使った超難読プログラムになっているという話でした。で、全部の罠を突破すると「congratulation」という文字列がバイナリに含まれているという…。そんな話が「The BASIC」誌に読者からの投稿であった記憶があります。
伝聞だし、自分で解析した訳じゃないですが、20年くらい前の話です。これが最古というわけじゃないでしょうが、少なくともそれ位の昔からはあるということですね。
vyama 「バグ取れワンワン」
Re:懐かしの (スコア:3, 興味深い)
オペランドジャンプ (-_-; なんかもバリバリに使っている難読化プログラムがありましたな
みんつ
Re:懐かしの (スコア:1, 興味深い)
よりも
「REM文の中間コードが収められているアドレスに直接ジャンプするだけのブートストラップ」
を多く見かけたような記憶がします。
つまり、REM文自体がその時点でバイナリレベルで正しいマシン語になっているため、
結合や変換すら必要なく、そのまま実行できてしまう、という仕組みですね。
Re:懐かしの (スコア:2, 興味深い)
さすがに、REM文に文字列として書けるコードだけでゲーム(とか)を組むのは苦しそうです。
かなり遅い時期までプログラムリスト打ち込み文化が残っていたMSX・FANで時々見られた手法ですね。あの雑誌には「1画面プログラム」なんて部門もありましたし。
Re:懐かしの (スコア:1)
>コメントがプログラムになってるという。
懐かしい。
ファンダムで1画面に収まったMAZEのプログラムを見て感動した記憶新たに。
# この手法の私の一番古い記憶です
# ちょっと違うか・・・あれは圧縮だったっけ・・?
Re:懐かしの (スコア:1, 参考になる)
文字列を実行させるコードが紹介されていました。
unix系のOSでは,文字列はdataセクションに割り付けられるので,
textセッションに無理矢理割り付けないと実行出来ませんが,
MS-DOSならば動作すると思います。
昔ファームの仕事をしていた頃,この技を使おうと思ったのですが
コードレビューで却下されました。
却下理由:読みにくい でした。