掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLをロードできない理由 (ID:151051)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
回答感謝です takeさん > 7-zip32.dll でしたら > (略) > とするかと思うので生成と破棄を繰り返すのがよくわかりません 前任者が作ったのか、ネットで拾ってきたものかはわかりませんが、 そのようになっています。ただ、圧縮展開のアーカイバではないので、 必要なタイミングで生成・破棄するだけのことです。 今回は、1回で済むことを2回やっているのが問題だと仰るのかもしれませんが そのように変更したとしても、時間をおいて、2回目にzipを展開するタイミングで 再度インスタンスを生成すれば同じようにエラーになります。 それとも、初回ロードしたら「インスタンスを保持し続けるべき」なのでしょうか? AAAAA さん 強制的に、DLLのフルパスを指定すると、問題なく動作しました。 HFUKUSHIさん FreeLibraryのリターンは見ていませんでしたが、確認できるようにしたところ True で返ってきていました。 takeさんの仰るとおり、一応ソースを抜粋しますが、どこかに介入する要素があるのでしょうか? ----- const s7zip32dllName = '7-zip32.dll'; ----- var h7zip32dll: THandle; s7zip32dllPath: String; ----- //ロード:DLLをフルパス指定できるようにはなっていました if s7zip32dllPath = '' then begin //フルパス指定なしであればdll名だけでロード h7zip32dll := Windows.LoadLibrary(s7zip32dllName); end else begin //フルパス指定あるので、そのパスを使ってロード h7zip32dll := Windows.LoadLibrary(PChar(s7zip32dllPath)); end; // if h7zip32dll = 0 then begin // GetLastError→126:指定されたモジュールが見つかりません ----- //アンロード:Resultはノーチェックでしたが、修正 if not Windows.FreeLibrary(h7zip32dll) then begin //ここは通りませんので、失敗はしていない様子 ----- DLLロードの検索順序は、アプリケーションが読み込まれたディレクトリが 最優先だと思っていましたし、そのように記載があるのですが。 例えばココ https://support.microsoft.com/ja-jp/topic/dll-%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89%E6%94%BB%E6%92%83%E3%82%92%E9%98%B2%E3%81%90%E3%81%9F%E3%82%81%E3%81%AB%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%92%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%81%A7%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8B-d41303ec-0748-9211-f317-2edc819682e1 DLL hijacking攻撃の対策の何かなのか? ただ、理屈・仕様がわからないのであれば、AAAAAさんの仰るとおり、 フルパス指定で回避が解決策でしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.