BREW(Binary Runtime Environment for Wireless) 11at TECH
BREW(Binary Runtime Environment for Wireless) 11 - 暇つぶし2ch233:231
09/12/08 09:58:02
あー、すまん。wikiに4.0対応版がアップされてるのね・・・
しかしソース読んでみたが、IModuleVtbl::CreateInstanceで展開して本体のCreateInstanceに
繋いでるな。これ使っちゃうとグローバル変数駄目かもしれない。

BREWがグローバル変数使えなかったのはmodのローダ(OSの処理)がアドレスのリロケーション
を行わないから・・・だったはず。で、elf2modが自前でリロケーション行う処理を追加してmod吐く。

なんだけどこのリロケーション処理、AEEMod_Loadの前に連結されてるはず(その分AEEMod_Load
本体のアドレスがずれる)。modバイナリでいうと0x08~か?
で、直にCreateInstanceへ飛んじゃうとこのリロケーション処理行われないままだから、グローバル変数
へアクセスすると落ちる。リロケーション前だと多分、プログラムコード部分(かもっと前)と被ってる。
3.1版では展開用のAEEMod_Loadが呼び出すのは展開されたmodのオフセット0x08(ModuleProxy.cppsの175行)、
つまりリロケーション処理のコード。だからグローバル変数が使えてる。

・・・と予想してみた。
4.0でグローバル変数使うためには>>232で書いたように、圧縮バイナリを展開プログラムに持たせるしか。
あるいは自力でリロケーションコード書いて、CreateInstanceで呼び出す・・・これはちょっと無謀かも。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch