6.24 $Super$$ と $Sub$$ を使用したシンボル定義へのパッチの適用

既存のシンボルを変更できない場合に使用できる特別なパターンがあります。

例えば、外部ライブラリや ROM コード内に含まれている場合、既存のシンボルを変更できません。このような場合、$Super$$ パターンと $Sub$$ パターンを使用して既存のシンボルにパッチを適用します。

関数 foo() の定義にパッチを適用するには、以下を使用します。

$Super$$foo

パッチを適用していない元の関数 foo() を識別します。このパターンを使用して、元の関数を直接呼び出します。

$Sub$$foo

元の関数 foo() の代わりに呼び出す新しい関数を識別します。このパターンを使用して、元の関数の前または後に処理を追加します。

$Sub$$$Super$$ のメカニズムは静的なリンク時にのみ機能します。$Super$$ の参照をダイナミックシンボルテーブルにインポートまたはエクスポートすることはできません。

以下の例では、既存の関数 foo() への呼び出しの前に、 関数 ExtraFunc() への呼び出しを挿入する方法を示しています。

$Super$$ と $Sub$$ の使用
extern void ExtraFunc(void); extern void $Super$$foo(void):/* この関数が元の関数 foo() の代わりに呼び出される */ void $Sub$$foo(void) {   ExtraFunc();    /* 追加のセットアップ作業を行う */   $Super$$foo(); /* 元の関数 foo() を呼び出す */                   /* 元の関数 foo() の呼び出しを回避するには                    * $Super$$foo(); 関数の呼び出しを省略する。*/ }
関連情報
ELF for the ARM Architecture
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.