異世界スマポ
タイトルから考えただけなのでセマフォが本当に出てくるかは保証しません
「お前にチート能力を授けよう」
胡散臭いまでに神様臭のする白髭の爺様が言った。これから異世界転移か転生させられるのであろう。そういった物語について私はよく知っていた。
「私は……トラックに轢かれたのですね」
「心配することはない、お前の参加していたプロジェクトはトラックファクターが5じゃ。堅牢な組織じゃ、一人いなくなったところでどうということはなかろう」
私はプロジェクトではなく人生の心配をしていたのだが。とはいえ死んでしまったものは仕方ない、気になるのは過去よりも未来のことだ。
「異世界に転移か転生させられるのですか」
「こういうとき日本人は話が早くて助かるのう。ある世界で勇者召喚の儀が行われた。お前にはその世界へ転移してもらうことになる」
「どんな世界なのですか」
「かの世界は……」
爺様は一呼吸置いて、言った。
「かの世界は、トラックファクターが-1じゃ」
「は? 型が……」
「符号ありじゃ。少なくとも一人はトラックで轢かれた者がおらねば、かの世界は遠からず破綻しよう。故に、トラックに轢かれたお前に世界を立て直してもらう」
一遍死んでみるものだと私は思った。どんなに長生きしても、トラックファクターが-1のプロジェクトなんて経験することはないだろう。……と思ったが、トラックに轢かれてほしいクソ野郎はどこにでもいるものだ。もしかしたら命の危機を感じたあのプロジェクトはトラックファクターが負だったのかもしれない。
「物思いに耽るのは後にするのじゃ、ここに長居してもらっては困るからの。状況が飲み込めたのであれば、転移してもらうぞ」
「ちょっと待ってください、その、チート能力とは……」
「そのことか。お主が死んだとき魂の所有権が解放される。勇者召喚の儀は再初期化前の魂を奪ってくるものじゃ」
「はあ……」
なろうファンタジーにありがちな唐突な原理解説が始まった。
「魂はシリアライズされ通信路を通して世界を渡り、受信者によってデシリアライズされる。外部データをサニタイズなしにネイティブ実行する仕組み、ここに脆弱性がある」
「私に悪意あるコードを仕込むのですか」
「善意のコードを仕込むのじゃ」
「MITM ですか」
「そうじゃ」
「暗号化は」
「それができる設計者が外部データをサニタイズせずに実行させると思うか」
「思いません」
「つまりそういうことじゃ」
なるほど。
なるほどではない。
なんだか出来の悪そうな世界だ。今から不安になってきた。
「言っておくが設計も実装もワシがしたのではないぞ」
「はあ……それで、どういったチート能力をいただけるのですか」
「お前には参照カウントを操作する能力を授ける」
「スマートポインタですか」
「スマートポインタじゃ。あらゆる物質はスマートポインタで管理されている。参照カウントを自由に操作できれば、好きなリソースを解放することができよう。ランタイムの知識がなければ為し得ない裏技じゃ、存分に活用して世界をハックするがいい」
「まだよくわかりませんが、とりあえず把握しました」
「ならよい。ゆけ」
そうして私は再び意識を失った。
## 解説
●ペイロード
脆弱性 (ある種のバグ) を突いて都合の良い状態を作った後、具体的にどのような悪意ある行為を行うかを記述したコード。
脆弱性を突くコードそのものはエクスプロイトと呼ばれる。
詳しくは妹エクスプロイト https://novel18.syosetu.com/n2670fi/ を参照。
●トラックファクター
「最小で何人がトラックに轢かれるとプロジェクトが立ち行かなくなるか」により測る、プロジェクト進行の安定性の指標。
たとえば「△△の部分を作ったり直すのは○○さん一人しかできない」という状態でその○○さんがトラックに轢かれると、△△に何かあったときに誰も手を付けられないためプロジェクトが詰む。よってこの場合トラックファクターは1。
ふつうトラックファクターは正の整数である。
ゼロ以下だと既に破綻のわかりきっているプロジェクトということになるので、安定の度合いなど考える意味はない。
●所有権
オブジェクトを破棄するとき、リソース解放やメッセージ通知などある種の処理が必要になることがある。
オブジェクトひとつごとに破棄の処理はちょうど一度だけ行われてほしいため、複数箇所から共有されるオブジェクトなどは特に、誰がどこで破棄の処理を実行すべきかうまく定める必要がある。
オブジェクトを破棄する責任と権限を持つ変数や型などを、「(オブジェクトの) 所有権を持つ」というように表現する。
●初期化
メモリ領域やハードウェアなどを本格的に使う前に、きれいな状態にすること。
食事の前に食卓を拭くようなこと。
●シリアライズ
直列化ともいう。
複雑な構造を持つデータを、文字列やバイナリデータなどのような一次元のデータとして表現すること。
逆向きの、一次元のデータから複雑な構造を再現する処理は、デシリアライズという。
(デシリアライズには「直列化復元」という日本語があてられているようだが、あまり使われているのは聞かない。)
●サニタイズ
浄化無害化とも。
特殊な意味を持つデータ片を含みうるデータについて、特殊な意味が解釈されないように変更を加えること。
●ネイティブ実行
何らかのプログラムデータについて、それを読んで解釈するプログラムに間接的に実行させたりするのではなく、プログラムそのものが実行されること。
たとえばシミュレータで車を走らせるのがネイティブでない自動車走行で、現実に車を走らせるのが自動車のネイティブ走行である。
●脆弱性
悪用できるバグや欠陥のこと。
妹エクスプロイト参照。
●MITM / 中間者攻撃
通信する二者間に介入して、なりすましや盗聴を行うこと。
たとえばクリエイターに対してはファンのふりをして同人誌を買い、ファンに対してはクリエイターのふりをして同人誌を高く売り付けるなりすまし転売ヤーがいたとすれば、それが中間者攻撃である。
中間者攻撃は、よく対策された通信を行わないと、そもそも攻撃されている事実に気付けないことも多い。
●参照カウント / reference count
複数箇所で共有されるオブジェクトは、明確に誰が所有していると決めがたく、複数で所有権を共有したいことがある。
このような場合、「他の誰かが使っているうちはそのままにしておいて、最後に使い終えた人が破棄の責任をもつ」というスタイルで所有権を管理することがある。
このとき、「何ヵ所からオブジェクトが必要とされているか (すなわち参照されているか)」を数えるカウンタを用意し、参照するたびに1増やし、参照をやめるたびに1を減らすことで、誰も参照しなくなる直前の (最後の) 参照者がそのことに気付けるようにする。
このカウンタの数値が、参照カウントである。
●スマートポインタ
参照カウントや所有権システムなどによって、必要なくなれば自動的にオブジェクトを破棄してくれるような参照の仕組み。
●ランタイム
プログラムの実行に必要な、基盤的なプログラムやライブラリのこと。