**LLM 支援による逆コンパイルのロングテール**

2026/02/17 3:19

**LLM 支援による逆コンパイルのロングテール**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

(欠落した詳細を組み込む):**

デコンパイル作業は、約 25 % の一致コードから 75 % へと進展し、最初のワンショットデコンパイル後に ~58 % の中間ピークがありました。進捗は、大きくてグラフィックスを多用する関数の小規模なセットで停滞しており、逆解析が困難です。

ワンショットデコンパイルは最初にカバレッジを向上させましたが、残ったタスクが難しいと判定したロジスティック回帰モデルによる関数優先度付けは失敗しました。アセンブリ命令のテキスト埋め込みを用いた関数類似性優先化に切り替えることで、進捗が大幅に改善されました。手作業で構成された複合スコアリングと Coddog のレーベンシュタイン距離ベースのオペコード距離という二つの類似性手法は 90.6 % のケースで異なる最も類似した候補を選択したため、両方が現在採用されています。

“gfxdis.f3dex2”(マイクロコード逆アセンブル)などの Claude スキルが追加され、ノイズが多く不安定な出力だったデコンパイル・パーミュテーターは後に削除されました。手動または Claude による自動クリーンアップループは、関数をより慣用的にし、類似性ベースのスケジューリングを支援することでマッチ品質を向上させました。

ワークツリーは別々のコードコピーで同時エージェントが作業できるようにし、変更の衝突を防ぎます。Claude フックはガードレール(例:SHA1 ハッシュ編集のブロック、テストスキップの禁止、特定スクリプトへのビルド制限)を強制します。Nigel the Cat は設定ファイルで長時間タスクを調整し、リアルタイムモデル出力と繰り返しプロンプトをサポートし、ワークツリー間で作業をシャーディングします。「Glaude」はルーチンクリーニング/ドキュメントタスクを安価な GLM バックエンドに振り分け、Opus トークンは難しい問題に留めます。

1 月初時点では 157 個 の関数が残っていました;現在は 124 個 に減少し、大きい(> 1,000 命令)、グラフィックスを多用する、そして数学的に負荷の高いルーチンが難易度を支配しています。プロジェクトのワークフローツール―スキル、類似性スコアリング、フック、オーケストレーション、モデルルーティング―は総合してデコンパイル曲線を平坦化しますが、残りの難しいケースには更なる最先端モデルが必要です。

本文

前回の投稿では、コーディングエージェントを使って Nintendo 64 のゲームを逆コンパイルし、ワンショットでの逆コンパイルが非常に有効だったことについて説明しました。その手法のおかげで Snowboard Kids 2 の逆コンパイルは急速に進み、マッチしたコードの割合が約 25 % から 58 % に上昇しました。しかしその後進捗は劇的に鈍化し、ワークフローを大幅に変更せざるを得ませんでした。変更を加えた結果、逆コンパイルはおよそ 75 % 程度まで達しましたが、その先で再び停滞してしまいました―今回は本当に止まったのかもしれないと考えているものの、まだ証明される可能性も残っています。

この投稿では、プロジェクトが成熟するにつれてワークフローがどのように進化したか、何が役立ち、現在どこで行き詰まっているかを説明します。これらの観察が他の逆コンパイルプロジェクトにも有用になることを願っています。


類似関数を優先する

逆コンパイルは時間とトークンを消費するため、どの未マッチ関数に取り組むかの選択は非常に重要です。

  • 元々のアプローチ – 推定難易度(命令数や制御フローの複雑さに対してロジスティック回帰)で優先順位を決める。初期はうまくいったものの、残りがすべて難しい状態になってしまいました。
  • 埋め込みによる類似性 – Macabeus はアセンブリ命令のテキスト埋め込みを作成し、高次元潜在空間で近傍関数をクエリしました。Claude も同様に関数の類似性を認識でき、パターンを再利用できると示唆していました。

未マッチ関数に対して類似した既存関数を算出するツールを書き、エージェントループで「類似(既にマッチ済み)な相手がある」関数を優先させました。これが非常に効果的で、多くの未認識だった類似性が Claude の試行を導きました。

関数類似度の算出

ベクトル埋め込みは高速検索に向いていますが、候補は数千程度しかなく、クエリ自体が時間的に厳密ではありませんでした。したがって、未マッチ関数同士をすべて対比し、正確な類似度を算出する方針に切り替えました。これは試行ごとのトークンコストを考えると妥当です。

まずは手作業で複合スコア(命令 n‑gram、制御フローパターン、メモリアクセスオフセット、構造指標)を組み合わせましたが、後から見ると過剰設計でした。そこで Coddog を使用しました。これは opcode シーケンスに対して境界付き Levenshtein 距離を高速に計算し、0–1 の範囲で正規化します。

残った未マッチ関数については、Coddog と私の手法が 90.6 % のケースで最も類似した候補を異なるものとして選択しました。両方とも使い続けていますが、お互いに補完的であり、どちらかが絶対に優れているわけではありません。

専用ツール

プロジェクトでは Claude のスキルを数多く使用しています。その中でも特に有効だったものは次の二つです:

  • gfxdis.f3dex2 – ヘクサ値を F3Dex2 コマンドへ逆アセンブルします。
  • decomp‑permuter – 小規模な変異を膨大に試し、100 % のマッチを狙います。

F3Dex ツールとドキュメント

N64 の Reality Display Processor(RDP)はマイクロコードで動作します。 Snowboard Kids 2 は Nintendo の F3Dex2 ライブラリを使用しているため、API を逆解析するだけで済みました。

Claude に対し F3Dex2 コマンドの参照と gfxdis.f3dex2 ツールを提供したことで、F3Dex2 コードの認識・逆コンパイルが格段に向上しました。

パーミュータ

パーミュータは「盲目的に数百万回小さな変異を試みる」手法です。理論上は LLM を補完しますが、実際には不自然なコード(論理的でない変数再利用、

do {} while (0)
ループ、入れ子代入)を生成し、Claude がノイズに対処するために多くのトークンを消費してしまいます。数回試した結果、パーミュータは除外しました。時折勝利があったものの、クリーンアップコストや不安定さが正当化できませんでした。

クリーンアップとドキュメント

コードの整形・文書化はマッチ率を直接向上させるわけではありませんが、以前は脆弱だった(ポインタ算術、変数置換)関数を安定した実装へ移行し、類似ベースのスケジューリングに有効な例を増やしました。

Claude をループで走らせ、一度に一つの関数だけを整形させました。これによりプロジェクト構造の文書化も進みました(すべてがどのように機能するかを書き下すことは Claude にとっても必須です)。

副作用として、チートコードシステムを文書化する過程で未知のチートコードを発見しました。


スケーリングと新ワークフロー

継続的な逆コンパイル作業に加え、非逆コンパイルタスクへの拡張がリソース・安定性・タスクオーケストレーションの課題となりました。以下の四つの変更でスケールを維持できました:

  1. Worktrees – 複数エージェントの同時作業を容易にします。
  2. Agent hooks – 破壊的・無駄な操作を制限します。
  3. Nigel the Cat – タスクオーケストレーションを向上させます。
  4. Glaude – より多くのトークンを確保します。

Worktrees

複数タスクが衝突しないように、独立したコードベース(ワークツリー)を使用しています。私はエージェントを三つの別々のワークツリーと、人間作業用メインブランチで走らせています。

Claude Hooks で安全策強化

自動化は Claude が数時間見逃してしまうミスを生むリスクがあります。フックにより、特定アクション(ファイル編集など)の前にコードを実行し、以下のような制限を設けています:

  • SHA1 ハッシュの変更をブロック
  • コミット時にテストスキップを防止
  • build-and-verify.sh
    以外でのビルドを禁止
  • 自動生成ファイルへの編集を停止

これにより、無駄や破壊的操作が大幅に減少しました。ただし完全ではなく、Claude はまだ粘り強いです。

Nigel the Cat によるタスクオーケストレーション

長時間実行されるエージェントループは不可欠でした。古い

run.py
を独自リポジトリ Nigel に切り出し、タスクを設定ファイルで表現しました:

candidate_source: |
  grep -o '.name = .*"' src/main.c | sort | uniq
prompt: |
  Look up the modelEntityConfigs entry or entries where `$INPUT` in src/main.c.
  The fields compressedDataStart/compressedDataEnd/displayListStart/displayListEnd contain hex addresses.
  These hex addresses should be asset entries. Look for the appropriate entry in assets.h/snowboardkids2.yaml.
  If the entry is not present, you will need to add it.
  In both cases, ensure that it has a semantically appropriate name (based on the asset name, e.g. TOWN_DISPLAY_LIST).
  Commit your changes when you're done.

Nigel はスクリプト名で検索し、適切に処理します:同一入力は二度実行されず、有効な変更だけがコミットされます。

Nigel の主な機能

  • 非対話モードでもリアルタイムモデル出力
  • Ctrl-\
    で現在のタスク終了後に安全停止
  • ビルトイン並列処理(
    --shard X/Y
    )でワークツリー間の衝突を回避

Ralph Wiggum

Ralph と同様、Nigel は

--repeat
オプションで Claude に同じタスクを繰り返し提示できます。初期はトークン節約のため 30 回に制限しましたが、実験後は
--repeat 3
を除外し、プロンプトごとの試行回数は無制限にしました。これで極端なケースに対処できつつも全体のトークン消費を抑えられます。

Glaude と GLM の寛大クォータ

残り未マッチ関数には多くの試行、途中出力、リファクタリングが必要で、Claude のトークン予算を圧迫します。GLM(z.ai から)は料金が安く、クォータも寛大です。そこで glaude を作り、Claude と同じインターフェースで GLM バックエンドへ静かに転送します。

主にメカニカルなタスク(クリーンアップ、リファクタリング、ドキュメントループ)には glaude を使用し、難易度の高い作業だけを Claude に任せます。完全ではありませんが、Opus のトークンを真価ある作業に集中させることでシステム全体を持続可能にしています。


現状

すべてのエンジニアリング(類似スコアリング、スキル、フック、オーケストレーション、モデルルーティング)を終えた結果、1 月初めに曲線は平坦化しました:

  • 157 個の関数が残っていました。
  • 継続作業で 124 へと減りましたが、ダイナミクスは根本的に変わりました。

三つの要因が主導しています:

  1. 大きな関数(1,000 命令を超える) – Claude は即座に諦めることがあります。
  2. グラフィック中心の関数 – マクロでディスプレイリストを構築する方法は LLM を深く混乱させます。
  3. 数学関数(行列/ベクトル変換)– 短いものでも Claude を混乱させることがあります。

Nigel the Cat はまだ稼働中で、マッチングは次世代モデルが登場するまで難しくなります。


手伝ってもらえますか?

ここまで読んでくださった方なら、逆コンパイルと Snowboard Kids 2 に興味を持っていることでしょう。Snowboard Kids 2 逆コンパイルプロジェクトをご覧になり、Discord でご協力いただける場合はぜひお声掛けください。また Bluesky でも更新情報を発信していますので、フォローも歓迎です。

同じ日のほかのニュース

一覧に戻る →

2026/02/17 3:41

14歳のマイルズ・ウーは、重量の万倍を支えられる折り紙パターンを折りました。

## Japanese Translation: --- ### Summary 14歳のミレス・ウーは、ニューヨーク市にあるハンター・カレッジ高校(Hunter College High School)の9年生であり、彼がミウラ折り紙パターンについて行った研究で2025年 Thermo Fisher Scientific Junior Innovators Challenge の賞金25,000ドルのトップ賞を受賞しました。ウーは、コピー用紙、薄い厚手紙(light cardstock)、重い厚手紙(heavy cardstock)の3種類の紙を使用し、家族のリビングルームに設置した臨時実験室で **54 の異なるバリエーション**(108 回の試行)をテストしました。各折り紙は 64 平方インチで、ガードレールが 5 インチ間隔で配置されていました。初期重量推定は約50ポンドでしたが、最も強いパターンは **200 ポンド**まで耐え、正確な測定には 50 ポンドのエクササイズウエイトを必要としました。この結果、デザインは自身の重さの **10,000 倍以上** を支えることができること(ニューヨーク市のタクシーで4,000頭以上のゾウを運ぶに相当)を示しています。 この研究は、ハリケーンや山火事などの自然災害時に堅固で費用対効果が高く、簡単に展開できる **配備可能な緊急シェルター** を開発することを目的としています。ウーは、1枚または複数枚のミウラ折り紙シート(長方形/テント状構造)でアーチ型シェルターをプロトタイプ化し、横方向圧縮や多方向力に対する耐性を検証する計画です。 この業績はサイエンス協会の社長マヤ・アジャメラ(Maya Ajmera)によって注目されました。彼女はウーが生涯の折り紙趣味を厳密な構造工学へと変革したこと、創造性、リーダーシップ、チームワークを称賛しました。また、プリンストン大学のエンジニアグラウィオ・H・パウリーノ(Glaucio H. Paulino)は、設計をスケールアップするには非線形強度スケーリング、ジョイント設計、不完全性、ボッキング、多方向荷重抵抗の課題に対処する必要があると指摘しました。 ミウラ折り紙は日本の天体物理学者・宮浦耶(Koryo Miura)によって発明され、宇宙機関(例:日本のスペースフライヤー・ユニットや宇宙船のソーラーパネル)で使用されています。最近では、望遠鏡や衛星に適用できるブルームパターンも開発されています。ウーは6年前から紙折りを探求し、1960年代以降に拡張された折り紙の工学・医療・数学・建築への応用を知ったことで趣味から STEM 研究へとシフトしました。 Thermo Fisher Scientific Junior Innovators Challenge は1999年からサイエンス協会が主催する中学生向けの主要な全国STEM競技です。

2026/02/17 6:15

研究:自己生成型エージェントスキルは役に立たない (Note: This translation preserves the original meaning and maintains a natural, polite tone in Japanese.)

## Japanese Translation: 現在の要約は主要な発見とほぼすべての定量的詳細を捉えていますが、キュレーションされたスキルで影響を受けたタスク数を正確に追加し、著者数を修正することでさらに簡潔にできます。以下は若干改訂したバージョンです: > **要約:** > SkillsBench は 11 ドメインにわたる 86 タスクで大規模言語モデル(LLM)を評価し、「スキル」(事前定義された手順のステップ)がパフォーマンスに与える影響を測定するベンチマークです。キュレーションされたスキルが追加されると、平均合格率は「スキルなし」時より 16.2 pp 上昇します。効果は大きく異なり、ソフトウェアエンジニアリングでは +4.5 pp、ヘルスケアでは +51.9 pp に達します。実際に 84 タスクのうち 16 件がキュレーションされたスキルでマイナスの差分を示し、自身生成したスキルは全体として有益ではなく、モデルが消費する手順知識を信頼して作成できないことを示しています。わずか 2〜3 のスキルモジュールだけで完全なドキュメントよりも優れた性能を発揮し、これらのスキルを備えた小型モデルはそれらを持たない大型モデルと同等に競合できます。このベンチマークは 7,308 の対話軌跡で 7 つのエージェント–モデル構成をテストします。著者は複数機関からなる 38 人の研究者チームで、2026 年 2 月 13 日に公開され(ファイルサイズ 1,366 KB)、今後は最も効果的なスキルを選択してより効率的かつドメイン特化型 AI エージェントを構築する研究が進められることが示唆されています。

2026/02/17 5:34

Suicide Linux(2009)

## Japanese Translation: **改善された要約** この記事は、入力ミスしたコマンドを自動的に `rm -rf /` に書き換えてシステムを削除する「Suicide Linux」と呼ばれる皮肉な Linux ディストリビューションについて説明しています。Suicide Linux は、OS を使い続けられる時間を測るゲームや実験として提示されており、すべてのデータが失われるまでどれだけ長く使用できるかを試すものです。記事はその開発経緯を追っています:2011‑12‑26 の Debian パッケージとデモ動画、2015 年に自動修正機能がオプションであり標準の Linux 動作ではないことを明確化した説明、2017 年の Docker イメージ(`tiagoad/suicide-linux`)にソースコードが含まれていること、そして 2020 年に著者が自らそのパッケージを作成していないと認めたことです。記事は将来の改良点として、冗長な警告メッセージやランダムな単一ファイル削除などを追加し、実験を教育用途に安全にする提案も示しています。総じて、Suicide Linux は主に好奇心と学習ツールであり、システムの堅牢性をテストしたい開発者や「タイプミスアラート」スクリプトを作成したい人には有用ですが、一般的な Linux ディストリビューションに影響を与える可能性は低いと結論付けられています。

**LLM 支援による逆コンパイルのロングテール** | そっか~ニュース