SGI O2 のプロンプトを逆解析する

(原文: “Reverse Engineering the Prompt for the SGI O2”)

2026/02/09 7:25

SGI O2 のプロンプトを逆解析する (原文: “Reverse Engineering the Prompt for the SGI O2”)

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

要約

Japanese Translation:

著者は

ip32prom-decompiler
を開発しました。このツールは、SGI O2 マシンで使用されている 512 KiB の IP32 PROM を ビット単位で同一 な MIPS アセンブリ (.S) ファイルに逆アセンブルし、ラベル、コメント、および関数境界を完全に含みます。

各「SHDR」セクション(長さ・名前・バージョン・タイプフラグ(コード/メタデータ)・任意のメタデータ・2 つのチェックサム)を解析することで、ツールはファームウェアの 3 つのサブセクションを再構築します:

.text
0x81000000
に、
.rodata
0x81048e70
に、そして
.data
0x81054100
に配置されます。チェックサムアルゴリズムは 32‑ビット語全体の 2 の補数和であり、セクションデータと SHDR 自体の両方に適用されます。

到達可能なコードを幅優先探索し、相対/絶対分岐、ジャンプテーブル、および構築されたアドレスに特別な処理を行うことで、バイナリ命令の約 90 % を回復します。可視化(XPM 画像)はコード、ヘッダー/チェックサム、ASCII データ、アクセス済みメモリ、nop パディング、および未知のバイトを色分けし、手動解析を支援します。また、コンパイラ遅延スロットによって導入された到達不能またはデッドコードが検出され、注釈付きで記録されます。

逆アセンブルされたアセンブリは同一の ROM イメージに再構成でき、PROM 構造を完全に理解していることを確認します。ファームウェアがこれからゼロから再構築可能になったため、将来の CPU アップグレード(例:新しいプロセッサの導入)は SGI のサポートに依存せずに実行できるようになり、O2 の PROM が変更不可能であるという長年の制約を克服します。この成果は、ホビイストやレトロコンピューティング愛好者に対しても、レガシーファームウェアのリバースエンジニアリング手法として信頼性の高い方法を提供します。

この改訂版サマリーは、リストからすべての主要ポイントを取り入れつつ、曖昧または推測的な表現を排除して明確に保っています。

本文

SGI O2 の PROM を逆解析する

===============================

2000 年代初頭から、Silicon Graphics O₂ の CPU を 900 MHz RM7900 にアップグレードできる可能性は、PROM ファームウェアを変更できないことにより阻まれてきました。
そこで私は ip32prom‑decompiler を作成しました。このプログラムは PROM をソースファイルへ逆コンパイルし、同一ビットのイメージとして再構築可能です。デコンパイラは次のような機能を備えています。

  • 既知定数の置換
  • メモリアドレスにラベルを付与
  • コメント・関数説明の挿入
  • 関数境界のマークなど、読みやすさを高める多彩な仕掛け

この記事では、PROM の構造と内容を逆解析したプロセスを紹介し、デコンパイラ作成に至った経緯を説明します。


背景

Silicon Graphics O₂ は MIPS CPU を搭載した Unix ワークステーションです。
O₂ で使用できる CPU ファミリーは以下の2つがあります。

ファミリモデル周波数 (MHz)
In‑orderR5000 / RM7000180–350
Out‑of‑orderR10000 / R12000150–400

2000 年代初頭、Nekochan コミュニティは 300 MHz RM5200 と 350 MHz RM7000A を 600 MHz RM7000C に差し替えていました。
600 MHz の CPU は In‑order でありながら、ほとんどの場合 400 MHz R12000 より高速です。

「Upgrading an O2 to 600 MHz (and beyond!)」という記事にその改造手順が記載されています。
ここで言及される 900 MHz CPU は PMC‑Sierra の RM7900 です。E9000 コアを採用し、304 ピン BGA パッケージは以前の RM7000 と互換性があります。


(部分的な) ソリューション

PROM ファームウェアを逆解析し、可搬性のあるアセンブリ (.S) ファイルへ変換するプログラムを書きました。生成されたアセンブリはビットレベルで同一の PROM イメージに再構築できるため、デコンパイルが正確であったことを検証できます。
PROM ファームウェアを可搬性のあるアセンブリへ変換したことで、RM7900 用に必要な「明らかに改変された IP32 PROM イメージ」を SGI への依頼なしに作成できるようになりました。


外部注釈

アセンブリファイルをより分かりやすくするため、以下のような補足情報を付与しています。

ファイル用途
labels.json
分岐先・データの名前付きアドレス
comments.json
命令ごとの文書化
functions.json
関数境界と説明
operands.json
命令オペランド置換
relocations.json
実行時に別のアドレスで走るコード
bss.json
BSS(未初期化データ)シンボル名

生成されたアセンブリ

改善前

L_0xbfc019b0:
    lui     $t1, 0xbfc0
    lui     $t0, 0xa000
    addiu   $t1, $t1, 0x19c8
    or      $t0, $t0, $t1
    jr      $t0
    nop

L_0xbfc019c8:
    mtc0    $zero, 5
    mtc0    $zero, 29
    addiu   $t1, $zero, 0x23
    nop
    mfc0    $t0, $t7
    andi    $t0, $t0, 0xff00
    srl     $t0, $t0, 8
    beq     $t0, $t1, 0xbfc01ae4
    nop
    ...

改善後

/* Function tlb_init_uncached_trampoline [0xbfc019b0 - 0xbfc019c8) */
/* Jump to tlb_init through uncached KSEG1 */
tlb_init_uncached_trampoline:          /* 0xbfc019b0 */
    lui     $t1, %hi(tlb_init)
    lui     $t0, HI(KSEG1)
    addiu   $t1, $t1, %lo(tlb_init)
    or      $t0, $t0, $t1
    jr      $t0          # Jump to (KSEG1 | tlb_init)
    nop

/* Function tlb_init [0xbfc019c8 - 0xbfc01d98) */
tlb_init:                              /* 0xbfc019c8 */
    mtc0    $zero, $CP0_PAGEMASK
    mtc0    $zero, $CP0_TAGHI
    li      $t1, PRID_IMP_R5000
    nop
    mfc0    $t0, $CP0_PRID
    andi    $t0, $t0, PRID_IMP_MASK
    srl     $t0, $t0, PRID_IMP_SHIFT
    beq     $t0, $t1, tlb_r5k_init
    nop
    ...

IP32 PROM の逆解析


1. ヘッダの特定

最初の数バイトは次のように見えます。

00000000 <.data>:
   0:   10000011        b       0x48
   4:   00000000        nop
   8:   53484452        beql    k0,t0,0x11154   ; "SHDR"

0x53484452
は文字列 “SHDR” を表します。
ヘッダは
0x00–0x08
の分岐+遅延スロットと、
0x48–0x50
のもう一つの分岐で境界付けられています。この 2 本の連鎖分岐は
0x3a8
にある有効に見えるコードへ導きます。
したがって SHDR のサイズは 72 バイト(8 バイトの分岐+遅延スロットを含む)です。

2. 文字列

sloader
env
post1
firmware
version

名前とバージョン文字列は 32 バイト領域に格納され、続いて長さが記録されています。

3. セクション長

0x0c–0x10
の 4 バイトがセクション長(例:sloader は 16384)を示します。
この値を現在の SHDR オフセットに足すと次の SHDR 開始位置が得られます。

4. チェックサム

各セクション末尾には「偽」の命令があり、実際はそのセクションのチェックサム(32 ビット二進補数和)を保持しています。
SHDR 自体も同様に自身のフィールド(チェックサム領域以外)のチェックサムを含みます。

5. セクション種別とメタデータ

バイト意味
0x12
セクション種別(最低ビット: コード=1 / データ=0)
0x13
4‑バイト境界へのパディング
0x40–0x48
オプションメタデータ。
0x12
の最低ビットがセットされているときのみ存在

6. コード vs データ

Capstone を

--adjust-vma=0xbfc00000
で使用し、エントリポイントから幅優先探索するとほぼ全コードを発見できます。相対分岐は容易ですが、ジャンプ(
jal
) は近接絶対ターゲットを使います:命令自身のアドレスの上位4 ビットがターゲットになります。
実行開始点が物理
0xBFC00000
(仮想
0x1FC00000
KSEG1)であることを知れば、これらのターゲットは解決できます。

7. バイナリ可視化

XPM 画像では次の色で表現しています。

  • – コード
  • – ヘッダとチェックサム
  • – ASCII データ
  • – ロード/ストア命令がアクセスするメモリアドレス
  • 0x00000000
    (nop)
  • 0xffffffff
  • – 未解釈/不明

8. ファームウェアセクション

ファームウェアは特殊です。

サブセクション読み込み先長さ内容
.text
0x81000000
0x00048e70
実行コード
.rodata
0x81048e70
0x0000b290
文字列・テーブル等の読み取り専用データ
.data
0x81054100
0x0000bee0
初期化済み可変データ
sentinel
0x81000000
0x00000000
終端

最初の 4 バイト (

0x81000000
) はこのコードが動作する仮想アドレスです。次の 4 バイト (
0x00048e70
) が長さを示します。
ファームウェアは静的 ELF としてビルドされ、そのセクションを抽出し、この独自フォーマットに再パックしています。

9. チェックサム

セクションチェックサムと SHDR チェックサムの両方とも、すべての 32‑bit ワードの単純な二進補数和を使います。最後に符号反転し、保存されたチェックサムと足すとゼロになるようにします。


結論

IP32 PROM の逆解析は想定よりも容易でした。SHDR、サブセクションヘッダ、チェックサムの構造を把握できれば、ファームウェアは非常に直感的です。
構造が完全に理解されたことで、デコンパイラはビットレベルで同一な ROM イメージを再構築できるアセンブリソースを生成します。BSS 変数名、関数ラベル、コメント付きで出力されるため、ハードウェア初期化やブートプロセスの理解が容易になります。

この成果は Silicon Graphics O₂ の将来の CPU アップグレードに向けた基盤を築きます。

同じ日のほかのニュース

一覧に戻る →

2026/02/08 12:09

ご協力いただけるとのこと、ありがとうございます! 整えたいテキストをお送りください。すぐに丁寧に仕上げさせていただきます。

## Japanese Translation: ``` ## Summary Vouch は、貢献者がコードベースの設定可能な部分と対話する前に「証明(vouch)」される必要がある軽量なコミュニティトラスト管理システムです。また、明示的に「非承認(denounce)」を行うことでそのような対話をブロックできます。信頼関係は単一のフラット `.td` ファイル(Trustdown フォーマット)に保存されます。このファイルでは各行が1つのハンドルを保持し、オプションでプラットフォーム接頭辞(`platform:username`)と先頭マイナス記号が付けられたユーザーは非承認者として扱われ、その後に任意の理由が続きます。GitHub Actions は標準搭載の統合を提供します: - `check-pr` は `pull_request_target` で実行され、PR 作成者のステータスを検証し、未承認または非承認のプルリクエストを自動的に閉じることができます。 - `manage-by-discussion` と `manage-by-issue` は協力者がディスカッションやイシューコメントを通じて証明または非承認を行えるようにします。 Nushell CLI モジュールにより手動制御も可能です:`vouch add <user>`、`vouch denounce <user> [--reason] --write`、`vouch gh-check-pr <pr_id> --repo owner/repo`(ドライランまたは自動閉鎖)、および `vouch gh-manage-by-issue <pr_id> <comment_id> --repo owner/repo` などのコマンドがあります。ステータスチェックは終了コードを返します(`0 = vouched`、`1 = denounced`、`2 = unknown`)。 Vouch は任意のコードフォージで動作するよう設計されていますが、GitHub 統合がすぐに使用できる状態で提供されます。現在は実験段階であり、Ghostty プロジェクトによってテスト中です。このプロジェクトはコミュニティからのフィードバックをもとに機能を洗練しています。今後の計画としては、リポジトリ間で信頼リストをリンクし信頼ネットワークを構築すること、プラットフォームサポートの拡張、および自動化機能の強化が挙げられます。 *検証された参加を強制することで、Vouch は悪意ある貢献を減らし、コードレビューのワークフローを合理化し、安全なコラボレーションをオープンソースメンテナ、企業チーム、および広範なソフトウェア開発エコシステムに奨励することを目指します。``` ```

2026/02/09 6:52

米国におけるソーシャルメディア利用の変化 2020–2024:減少・断片化・極化 (2025)

## Japanese Translation: ## Summary: 本研究は、米国におけるソーシャルメディアの利用が縮小し、より断片化していることを示し、残存する活動の中で政治的に極端なユーザーが支配していると結論付けている。2020–2024年の全国代表データを分析した結果、プラットフォーム全体の利用率は減少し、対象者はやや高齢化し教育レベルも上昇しており、投稿活動が共和党ユーザーへと明確にシフトしている—特にTwitter/Xで顕著だ。既存研究では若年層と高齢層の両方で減少傾向が指摘されていたが、本稿は新しいデータを用いてそれらの発見を更新し、TikTokやRedditはわずかに成長しているものの、Facebook、YouTube、Xは市場シェアを失っていることを示唆している。予測される動向として、オンライン公共圏はより小規模で鋭く、極端な意見が支配するようになるとされ、一般ユーザーは離脱しつつも党派的声は依然として高いままである。この結果は、デジタル環境のさらなる分極化を招き、プラットフォームに広範なオーディエンスを維持する課題を投げかけるとともに、広告主や政治戦略家、民主的議論に関心を寄せる政策立案者にも影響を与える可能性がある。 ## Summary Skeleton **What the text is mainly trying to say (main message)** 本研究は、米国におけるソーシャルメディアの利用が縮小し、より断片化していることを示し、残存する活動の中で政治的に極端なユーザーが支配していると結論付けている。 **Evidence / reasoning (why this is said)** 全国代表性のある2020–2024年のANESデータは、全体的なプラットフォーム利用率の低下、やや高齢化し教育レベルが上昇したオーディエンス、および投稿活動が共和党ユーザーへとシフトしている—特にTwitter/Xで顕著だという事実を示している。 **Related cases / background (context, past events, surrounding info)** 以前の分析では若年層と高齢層の両方で利用減少が報告されており、本稿は新しいデータでそれらの発見を更新し、TikTokやRedditはわずかに成長している一方でFacebook、YouTube、Xは市場シェアを失っていることを指摘している。 **What may happen next (future developments / projections written in the text)** オンライン公共圏は小規模で鋭く、よりイデオロギー的に極端になると予測されており、カジュアルユーザーは離脱しつつも党派的声は依然として発言力を保っている。 **What impacts this could have (users / companies / industry)** ユーザーはより分極化したデジタル環境に直面し、プラットフォームは広範なオーディエンスの維持に課題を抱えることになる。トレンドは広告主や政治戦略家、民主的議論に関心を寄せる政策立案者にも影響を与える可能性がある。

2026/02/09 5:52

Google検索からさらに増えるMac向けマルウェア

## Japanese Translation: **改訂要約** この記事は、新しい AMOS/SOMA スティーラーが、Google と Medium からリンクされた偽の Apple‑スタイルサイトへユーザーを誘導することで Mac を感染させることができると警告しています。マルウェアは「how to clear cache on macos tahoe」という検索語で Google のスポンサー付き結果のトップに表示された Medium 投稿から発見されました。具体的には、docs.google.com、business.google.com、および Medium からのリンクです。仮想マシンをロックダウンして実行した場合でも、自動的にユーザーの Documents フォルダーを隠しディレクトリ「FileGrabber」にコピーし、ホームフォルダー内に見えないファイルを作成します:AppleScript(.agent)、Mach‑O バイナリ(.mainHelper)およびプレーンテキストのパスワードファイル(.pass)。また、Notes アプリへのアクセスも要求されます。 配信手法は昨年の ChatGPT ベースの AMOS キャンペーンを模倣しており、Base‑64 の難読化とマルウェア `curl` コマンドを使用してクォランティン属性なしでペイロードを取得します。ユーザーには Terminal に難読化されたコマンドを貼り付けるよう促されました。 この記事は、プロモートされた検索結果や Google スポンサーリンクに信頼しないことを読者に呼びかけています。クリックする前に URL の出所を確認し、評判の良い Mac 専門サイトを利用し、「Link Unshortener」(App Store から)などのツールで短縮 URL を展開することを推奨しています。完全に信頼できるソース以外の Terminal コマンドは絶対に実行せず、難読化された `curl` スクリプトには警戒すべきです。 総じて、macOS の保護は、ユーザーが知らずに Terminal で悪意あるコードを実行したり `curl` を介して実行したりすると回避される可能性があります。記事はオンラインコンテンツの批判的評価とコマンド実行時の慎重さを強調し、マルウェア感染を防ぐことを目的としています