議論/標準入出力/ストリームによる実装/11.終了処理


Top / 議論 / 標準入出力 / ストリームによる実装 / 11.終了処理

このページは何か? (by ひげぽん)

pe_server で dllmain を利用して初期化を行っていたが、dllmain に引数を渡すことで 終了処理にもつかう。
2chで頂いた以下のアドバイスを元にしています.

     DllMain()で初期化と終了処理を兼ねさせるなら
     動的生成ブートストラップがこんな感じになるかな?
     (テキトーなんでWindowsの仕様に合わせてはいない)
     いずれにせよこれやらないとDLLのデストラクタが呼ばれない
  
      push dword 0
      call monapi:dllmain
      add esp,4
      test eax,eax
      jz ERROR
      push dword 0
      call monalibc:dllmain
      add esp,4
      test eax,eax
      jz ERROR
      call user_start
      test eax,eax
      jnz ERROR # DLLと逆なので注意
     (続く) 
  
 376 Name: Be名無しさん [sage] Date: 2006/12/23(土) 20:19:26 ID: Be:
     (続き)
      push dword 1
      call monalibc:dllmain # コンストラクタとは逆順で呼ぶ
      add esp,4
      test eax,eax
      jz ERROR
      push dword 1
      call monalibc:dllmain
      add esp,4
      test eax,eax
      jz ERROR
      # 正常終了
      ret
     ERROR:
      # エラー処理等
      ret
  
     (続く) 
  
 377 Name: Be名無しさん [sage] Date: 2006/12/23(土) 20:24:30 ID: Be:
     >>376の訂正
     訂正
     2つ目のcall monalibc:dllmainはmonapi:dllmainの間違い
  
     (続き)
     dllmainの例
  
     extern "C" int dllmain(int reason)
     {
      switch (reason)
      {
       case 0: // DLL_PROCESS_ATTACH相当
        invokeFuncList(__CTOR_LIST__, __FILE__, __LINE__);
        break;
       case 1: // DLL_PROCESS_DETACH相当
        invokeFuncList(__DTOR_LIST__, __FILE__, __LINE__);
        break;
      }
      return 1;
     }
  

コメント

コメントはありません。 コメント/議論/標準入出力/ストリームによる実装/11.終了処理?

お名前:

MENU

now: 7

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2278, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:03 (3914d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.045 sec.