前の画面〕 〔クリックポイント〕 〔最新の一覧〕 〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了

2347 re(5):DLL の読み込み
2010/11/12(金)16:55 - 松岡 - 133.6.57.2 - 813 hit(s)

引用する
現在のパスワード


段々分かってきました。

http://yamanxworld.blogspot.com/2010/09/windows-dll.html

に書いてあるように

「Windows XP SP1 および Windows Server 2003 からは、
セキュリティ上の理由から検索順序が変更され、
カレンとディレクトリがシステム ディレクトリ
(%Windir%\System32 や %Windir%\System) や
Windows ディレクトリ (%Windir%) より後の 5 番目にくるように変更されました。」

shell32.dllは,%SystemRoot%\System32\shell32.dll
(普通は,C:\windows\system32)
にあり,

LoadLibrary(TEXT("shell32.dll"));

本来的には,XP SP1以降ならば安全なはずなのですが,
shell32.dllが間接的にdwmapi.dllというのを
呼ぶときに脆弱性が発生する可能性あるようです。

こうなるとOSが対応すべきことなので,gnuplotでどうこうという話ではないような
気がしてきました。

もう少し調べてみますが。

またガイドラインにある
SetDllDirectory ("");

LoadLibrary(TEXT("shell32.dll"));
の前に入れることぐらいは試してみます。

また,起動時のdllロードの件ですが,

DLL の検索順序は次のようになります。
1. アプリケーションがロードされたディレクトリ

になっているので,現在のgnuplotのパッケージは,必要なdllを
exeと同じフォルダにいれていますので,このフォルダに直接同じ名前で
整合性のとれたdllをたたきこまれる以外は大丈夫なはずです。
(そこまでやられたら原理的にはどうにもならない。)

ただ,

5. 現在の作業ディレクトリ (CWD)
6. PATH 環境変数の一覧にあるディレクトリ

容量を節約しようとして共通のdllをpathで共有するような場合,危険性があると
いうことになります。


〔ツリー構成〕

【2339】 DLL の読み込み 2010/11/12(金)08:51 竹の (258)
┣【2340】 re(1):DLL の読み込み 2010/11/12(金)09:18 松岡 (582)
┣【2341】 re(2):DLL の読み込み 2010/11/12(金)09:48 松岡 (747)
┣【2345】 re(3):DLL の読み込み 2010/11/12(金)13:18 竹の (231)
┣【2346】 re(4):DLL の読み込み 2010/11/12(金)16:00 松岡 (563)
┣【2347】 re(5):DLL の読み込み 2010/11/12(金)16:55 松岡 (1411)
┣【2349】 re(6):DLL の読み込み 2010/11/12(金)18:45 松岡 (248)
┣【2352】 re(6):DLL の読み込み 2010/11/16(火)07:52 松岡 (431)
┣【2353】 re(7):DLL の読み込み 2010/11/16(火)10:37 松岡 (486)

前の画面〕 〔クリックポイント〕 〔最新の一覧〕 〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了

※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.