ロゴ:株式会社テクノスフィア
NEW 採用情報
組込システム

仕様書なしの産業用機器を復元
ルネサスRL78マイコン
逆アセンブル実践ガイド

15年前に開発された計測機器制御基板を、elfファイルのみから解析・C言語復元し、最新マイコンへ移植した実践レポート

背景:仕様書もソースコードもない状態からの再開発

製造業のお客様から「15年前に開発した産業用計測機器の制御基板を再生産したいが、仕様書もソースコードも紛失してしまった。残っているのは実機と、コンパイル済みのelfファイルのみ」というご相談をいただきました。

対象のマイコンはルネサス RL78/G13。当時のメーカー担当者は既に退職しており、開発環境も失われている状態でした。部品の生産終了も迫っており、最新のマイコン(STM32F4シリーズ)への移植も同時に求められました。

払拭すべき3つの課題

このプロジェクトを進めるにあたり、以下の課題を整理しました。

1. アルゴリズムの特定とデータテーブルの存在

計測機器の核心である「制御ロジック」が、プログラム上の計算によるものか、あるいはROM/EEPROMに格納された独自のデータテーブルによるものかを特定する必要がありました。

elfファイル内にデータテーブルが不完全な場合、実機からのメモリダンプが必要になります。

2. ハードウェア依存のタイミング調整

15年前のマイコン特有の処理待ち(ディレイループ)が、現在の高速なマイコンでは再現できないリスクがあります。

計測機器としての「正確なパルス幅・サンプリング周期」を担保するため、実機の出力波形をオシロスコープで実測し、復元コードとのベンチマークを行う工程が不可欠でした。

3. 周辺回路仕様の把握

GPIOポートの先にあるアナログ回路(増幅器・フィルター等)の特性はバイナリからは読み取れません。

基板上の回路構成を実機から解析し、レジスタ設定値との整合性を確認する作業が必要でした。

逆アセンブルの実践手順

以下の手順でelfファイルからC言語への復元を進めました。

ステップ1:elfファイルの解析

# RL78用objdumpでディスアセンブル
rl78-elf-objdump -d firmware.elf > disasm.txt

# シンボルテーブルを抽出
rl78-elf-nm firmware.elf > symbols.txt

# セクション情報を確認
rl78-elf-readelf -S firmware.elf

RL78のアーキテクチャ固有のレジスタ名(P0, ADM, TDRなど)を手がかりに、ペリフェラル設定箇所を特定しました。

ステップ2:フローチャートの作成

ディスアセンブル結果から、以下の構造を読み取りました:

  • 初期化ルーチン:クロック設定、GPIO設定、ADC設定
  • メインループ:センサーデータ取得 → 演算処理 → 出力制御
  • タイマー割り込みハンドラ:10ms周期でのサンプリング制御
  • UART通信ハンドラ:外部PCとのデータ送受信

ステップ3:C言語への復元

解析結果をもとに、以下のようなC言語コードを復元しました。

// RL78/G13 ADC初期化(復元コード)
void ADC_Init(void) {
    ADCEN = 1;           // ADコンバータ有効化
    ADM0  = 0x00;        // ソフトウェアトリガモード
    ADM1  = 0x20;        // 10ビット分解能
    ADM2  = 0x00;        // Vref = VDD
    ADCE  = 1;           // 比較器有効化
}

// タイマー割り込みハンドラ(10ms周期)
__attribute__((interrupt))
void INTTM00(void) {
    static uint16_t adc_value;

    // ADC開始
    ADCS = 1;
    while(!ADCS);        // 変換完了待ち
    adc_value = ADCR;    // 結果読み取り

    // データ処理(省略)
    process_sensor_data(adc_value);
}

ステップ4:実機波形との突合

復元したコードをRL78評価ボードで動作させ、以下の検証を行いました:

  • オシロスコープで実機とのGPIO出力波形を比較
  • ADC値のサンプリングタイミングを実測
  • UART通信のボーレートとデータフォーマットを確認

この工程で、タイマー設定値の微調整や、ディレイループの補正を実施しました。

STM32への移植

復元したC言語コードを、最新のSTM32F4マイコンに移植しました。

移植のポイント

項目 RL78/G13 STM32F4
クロック周波数 32MHz 168MHz(5倍高速)
ADC分解能 10ビット 12ビット
タイマー 8ビットタイマー 16/32ビット高精度タイマー
開発環境 CS+ (ルネサス) STM32CubeIDE + HAL

クロック周波数が5倍になったため、ディレイループを以下のように調整しました。

// RL78版(32MHz想定)
void delay_us(uint16_t us) {
    for(uint16_t i = 0; i < us * 8; i++) {
        __nop();
    }
}

// STM32版(168MHz想定)
void delay_us(uint16_t us) {
    // HALのマイクロ秒ディレイを使用
    HAL_Delay_us(us);
}

成果:完全な動作再現に成功

プロジェクトは以下の成果を得ました:

  • elfファイルから完全なC言語復元:約2,000行のコードを復元
  • 実機との波形一致率99%以上:オシロスコープでの検証
  • STM32への移植完了:開発期間3ヶ月(通常の新規開発の半分)
  • 暫定仕様書の作成:今後のメンテナンス用ドキュメント整備

まとめ:レガシーシステムの逆アセンブルで押さえるべきポイント

本プロジェクトを通じて得られた知見をまとめます。

技術的なポイント

  • ハードウェアマニュアルの徹底活用:レジスタ操作の意味を正確に把握
  • 実機検証の重要性:波形測定によるタイミング検証は必須
  • 段階的な復元:初期化→メインループ→割り込みの順で解析
  • ツールの選定:objdump, IDA Pro, Ghidraなど複数ツールを併用

プロジェクト管理のポイント

  • 初期調査フェーズの確保:実現可能性を見極める期間が重要
  • 実機の確保:動作する実機があれば成功率が飛躍的に向上
  • 段階的なマイルストーン設定:解析→復元→検証→移植の各フェーズで区切る

テクノスフィアの逆アセンブル・レガシーシステム再構築サービス

弊社では、仕様書やソースコードがない古い組込み機器の再開発に対応しています。

  • 対応マイコン:Z80, 8051, AVR, ARM, ルネサス, TI, 日立系MCU
  • 対応ファイル形式:elf, hex, bin, s19など
  • 実績アーキテクチャ:8ビット〜32ビット幅広く対応

「古い機器を現代に蘇らせたい」「部品廃止で困っている」といったご相談は、お問い合わせフォームからお気軽にご連絡ください。