DLLをアンロードする方法 - ページ 4

 
OneDepo >> :

そうですね、これでDLL書き換えの待ち時間は減りますが、主な問題は解決しません:アンロードされたインジケータ - DLLを変更する!?明らかに、LoadLibrary()でライブラリがロードされ、ロードカウンタが1に設定されていますが、deinit()ではFreeLibrary()は呼び出されていないようです。カウンターは0にリセットされず、端子を閉じるまでDLLがロックされます。そう思うのですが、開発者に確認する必要があります。

誰が(このブランチの一部の参加者を除いて)あなたを妨げるのでしょうか。

#import "kernel32.dll".

int GetModuleHandleA ( string sss);
void FreeLibrary(int hhh);
#インポート


デインチット()

{

handlissimo=GetModuleHandleA("test-dll.dll")。

FreeLibrary(handlissimo) ;

}


???

関数のパラメータは自分で記入することができます。この方法で解放されたすべてのDLLをメモリから完全に削除するには - metatrader.exeの制限と、私が先に述べたvindaの強力なキャッシュ(dllcacheからの保護DLLファイルの置換を含む)のために - regsvr32を使用します。

TheExpertはMetaQuotesと関係があるんですね。

 

注意:regsvr32でもDLLがアンロードされず、Windowsが古いバージョンで埋めてしまうことがあります。実際にやってみると、1つのDLLが何週間もメモリに眠っていることがある。この場合、再起動することだけが有効です。再起動したくない場合は、プロセスエクスプローラーなどのセミハッカー的な方法が有効です。このフォーラムの職業差別主義者が主張するのとは逆に、どこからでも何でもメモリーからアンロードできるのです(ロードもできます、ハハハ、でも必要ないでしょう)。

http://www.softpedia.com/get/System/System-Info/Process-Explorer.shtml

短い説明文とプラグイン。

http://rootkits.su/app/ShowApp.aspx?id_a=36

 

まだ続いているんですね。わかりました。以下は、MS自身がregsvr32について語ったものである。


Regsvr32ツール:使用方法とエラーメッセージ


"Regsvr32ツール(Regsvr32.exe)は、自動的に登録されたDLLやOCXファイルなどのOLEコントロールを登録したり解除したりするために設計されたものです。Windowsシステム、Microsoft Internet Explorerやその他のプログラムのトラブルシューティングを行う際に必要となる場合があります。例えば、下記のMicrosoft Knowledge Baseの記事によると、Windows Update Centerのウェブサイトから再インストールする前に、Regsvr32.exeツールを使用してWuv3is.dllコントロールの登録を解除する必要があるとのことです。


をもっと見る。

「regsvr32.exeは、WindowsのレジストリにDLLやActiveXコントロールを登録するために使用されるユーティリティです。また、DLLファイル間の不整合の除去にも使用できます。"

 
HideYourRichess >> :

まだ続いているんですね。わかりました。以下は、MS自身がregsvr32について語ったものである。


Regsvr32ツール:使用方法とエラーメッセージ


"Regsvr32 (Regsvr32.exe) は、自動登録された DLL や OCX ファイルなどの OLE コントロールの登録と解除に使用されます。Windowsシステム、Microsoft Internet Explorerやその他のプログラムのトラブルシューティングを行う際に必要となる場合があります。例えば、下記のマイクロソフトのナレッジベースの記事によると、Regsvr32.exe ツールを使用して Wuv3is.dll コントロールの登録を解除してから、Windows Update Center のウェブサイトから再インストールする必要があります。"とあります。


をもっと見る。

「regsvr32.exeは、WindowsのレジストリにDLLやActiveXコントロールを登録するために使用されるユーティリティです。また、DLLファイル間の不整合を取り除くために使用されることもあります。"

さて、ハッカーおじさん、最後の文章から、regsvr32がどのように機能するか、もうお分かりでしょう。


http://support.microsoft.com/kb/207132

RegSvr32.exeは、以下のWin32関数をこの順番で呼び出します。

* OleInitialize
* DLLをロードするためのLoadLibrary
* DllRegisterServer または DllUnregisterServer を使用します。
* FreeLibrary
* OleUninitialize

http://msdn.microsoft.com/en-us/library/ms683152(VS.85).aspx
FreeLibrary機能

ロードされたダイナミックリンクライブラリ(DLL)モジュールを解放し、必要であればその参照カウントをデクリメントします。
参照カウントが0になると、呼び出し元のアドレス空間からモジュールがアンロードされ、参照カウントが0になると、呼び出し元のアドレス空間からモジュールがアンロードされる。
プロセスで、ハンドルが有効でなくなった。

つまり、regsvr32は、ライブラリのロードとリリースを行います。しかし、terminal.exeとは異なり、それ自体で、あるいは私が上で提案したシンプルでエレガントなソリューションで、ライブラリを解放しますが、メモリに留まり続けます(Windowsにライブラリをアンロードしない理由を与え、他のプロセスにそれをさせます) - メモリにぶら下がっているmetatraderとは異なり、コマンドラインユーティリティはregsvr32です。exeコマンドラインユーティリティは、そのPROCESSをSTOPし、EXIT from MEMORYで、Windowsにライブラリーをメモリーから完全にアンロードするように指示します。

ライブラリはregsvr32を使わなくてもアンロードできますが、ルーレットになります。ルーレットが好きな人もいれば、ほとんどのプロはそうでない、開発レベルの問題です。

もし、そのライブラリがシンプルで、他の多くのライブラリにまとわりつかなければ、すぐにアンロードできるかもしれません。しかし、ライブラリが複雑で、データベース化され、エキゾチックなコントロールを持つ場合、アンロードに数分から数時間かかることもある。

ところで、AlwaysUnloadDLLというパラメータについてですが、マイクロソフト社自身は、これは2000年までしか機能しなかったと主張しています(当時も今も「DLLの必要性」を計算する複雑なアルゴリズムが適用されています)。

http://msdn.microsoft.com/en-us/library/bb776795(VS.85).aspx

DLLをアンロードする

シェルは、DLLの使用回数がゼロになると自動的にアンロードしますが、一定期間DLLが使用されないと、アンロードされません。特にシェル拡張DLLをデバッグしている場合、この非アクティブ時間が許容できないほど長くなることがあります。Windows 2000以前のOSでは、レジストリに以下の情報を追加することで、非稼働時間を短縮することができます。

  • hkey_local_machine
  • ソフトウェア
  • マイクロソフト
  • ウィンドウズ
  • 現在のバージョン
  • エクスプローラ
  • AlwaysUnloadDll
 

私はまだひどい風邪をひいているので(でも、熱で寝込んでいるときでも、terminal.exeの問題を無料で、つまりお金の問題だけを解決するのを手伝っています)、興味のある人(不案内な専門学校生も)に、大手の長距離会社でシスアドとして働くことの難しさを教えることができます。

どんな大企業でも、普遍的なツールを使っています。これは、すべてのサーバーを意味する - ローカルおよびグローバルは、Eoraklを実行し、すべてのワークステーションでは、EoraklまたはMS SQL Serverのリンクのオフィス、Excelまたは分析プログラムの同じバージョンの同じプログラムを使用し、いくつかの" dbconnect.dll "です。そして、シスアドの開発者のための1つの "素晴らしい "日はついにプログラムの新しいバージョンをデバッグし、すべてのローカルシスアド(最初の100の会社で - シスアドは500から800、1.250テラバイトのハードディスクメモリ、130 NCRノード、145 Unixサーバーシステムと2600 Windowsサーバー、2,000以上の企業の場所で8万メールユーザができる)このプログラムREPLACEする順序が付属しています。プログラムは複雑で、いろいろなものを使っているので、コンピュータ上で書き換えただけではうまくいきません。また、regsvr32の後にコンピュータを再起動する必要があります - システム管理者にその時間がある場合

というのも、18時から24時までは事務職がまだパソコンで仕事をしており、24時になるとサーバーがYoraklahのサービス業務を 開始し、ステーションはWindowsの自動更新とアンチウイルスの自動更新を開始するからである。ステーションに行かずにREMOTEでregsvr32やoverload stationを起動する手段もありますが、必ずしも うまくいきません(Firewallが有効、logof-lennyユーザーでない、などなど)。そして、コンピュータのローカル管理者は50~100人で、お互いに遠く離れていて、違う階にあり、すでに閉鎖されたオフィスにいることもあります。

そこで、シスアドは社屋を走り回り、手でregsvr32を走らせる。

 

Regsvr32は、COMサーバーの登録と解除を行うために設計されています。

これらはすべてのDLLではありません。これは特殊なDLです。Regsvr32を呼び出す必要はありません。

上記のようにFreeLibraryを呼び出すか、"#import "を使用せずにペアで使用すれば十分です。

LoadLibrary、FreeLibrary。

ちなみに私のDLLはなぜかインジケータを外すとすぐに解除されます。

 

実は、個人的には、ロシア語と英語が読める人向けに書いているのです。不思議なことに、彼らはここで10回目の「なぜ、regsvr32は作られたのか」を繰り返しています。 マントラのように、呪文のように唱えている人もいれば、なぜだかわからないという人もいる。そして、regsvr32が必要な ことを行い、副作用がないことが重要な でしょうか?

救急車や集中治療室の医師が、アルコール依存症患者(のような「上級者」)に次亜鉛鉱ナトリウムを処方するようなものだ。

http://drugslist.ru/drugs/antichlor-sodium-thiosulfate/

というのも、......はフォトフィクサーで、彼を毒殺しようとしているのだ!」と叫び始めた。

http://www.rwwc.ru/recipe/index6.php

もし、ここに賢い人がたくさんいるのなら、どんなコンピュータにもある、あなたが望むあらゆるライブラリをロードし、すぐにアンロードする、WindowsによるDLLのキャッシュをこの方法でリセットする、その他の標準ユーティリティを指摘させてください。

 
AlexEro >> :

...

ここで10回目になるが、彼らは「なぜ、regsvr32は作られたのか」を繰り返す。regsvr32が必要なことを行い、副作用がないことが重要なのでしょうか?マントラのように、呪文のように唱えるのです。

救急車や救急病院の医師がアルコール依存症(のような「上級者」)に次亜硫酸ナトリウムを処方するようなものだ。

...

これはとても重要なことです。医療に例えるなら、ここに書かれていることは、病気の頭を斧で治療するようなものです。


AlexEro>>:

...

ライブラリのアンロードは、regsvr32を使わなくても可能ですが、ルーレットになってしまいます。ルーレットが好きな人もいれば、ほとんどのプロはそうでない、それは開発レベルの問題です。

もし、そのライブラリがシンプルで、他の多くのライブラリにまとわりつかなければ、すぐにアンロードできるかもしれません。しかし、ライブラリが複雑で、データベース化され、エキゾチックなコントロールを持つ場合、アンロードに数分から数時間かかることもある。

...


DELL機構のロード/アンロードの原理的な仕組みを理解してないから、この話題で気持ち悪い妄想をしてるだけだろ。また、FreeLibraryを使用してdeinitでライブラリをアンロードしようとするのはやめましょう、もちろん重大なエラーがない限り、ライブラリはそれ自体でアンロードされるべきです。あなたの言う「シンプルでエレガントな解決策」はナンセンスです。特にDllMain内でデッドロックが発生した場合、多くの場合うまくいかないでしょう。


繰り返しますが、DLLをアンロードする唯一の正常で正しい方法は、DLL自体をエラーなく書き込むことです。もし、DLLが正常にアンロードされない場合は、コーダーの手が曲がっている(つまり、コーダー、端末自体はすべて正しくできている)-それだけです。私はいつも、繰り返しになりますが、インジケータを外した後、すぐに普通にDLLをアンロードしています。そして、これは正しい、端末で設計された方法である。


そして、あなたは、シスアドとしての経験を引き合いに出して、自分のフィクションに重みを持たせようとしているのがむなしい。あなたがあまり賢いシスアドでないことはすでに判明しているので、とても幼稚で滑稽に見えます。

 
HideYourRichess >> :
DELLのロード/アンロードの仕組みが原理的に理解できてないだけで、だからこの話題で気持ち悪い妄想してるんだろうけど...。(また、FreeLibraryを使ってdeinitするためにライブラリをアンロードしようとしてはいけません。もちろん、ライブラリに重大なエラーがなければ、ライブラリはそれ自体でアンロードされるはずです。あなたの言う「シンプルでエレガントな解決策」はナンセンスです。特にDllMain内でデッドロックが発生した場合、多くの場合うまくいかないでしょう。
ハッカーおじさん、あなたの言葉には論理性がありません。もしライブラリが常にアンロードされているなら、なぜあなたの言う「私の」FreeLibraryの呼び出しは「多くの場合うまくいかない」のでしょうか?deinit()ブロックの中でFreeLibraryを余分に呼び出すと、どんな害があるのでしょうか?FreeLibrary()を呼び出すと、何らかの形でライブラリのリリースがブロックされるとか、そういうご意見はありませんか?はっきりしないね、クールハッカーおじさん、バレバレだよ。
 
AlexEro >> :
ハッカーおじさん、あなたの言っていることは論理的ではありません。

最初の質問 - どのプロセスからDLLをアンロードするか、システムはどのようにして知るのですか?

質問2 - dllをロードせずにエントリーポイントを見つけるにはどうしたらいいのでしょうか?


さて、本来は。dllは、正しく登録するために、regsvrの間にロードおよびアンロードされます。もちろん他のプロセスからのアンロードにも効果はない。

自分よりバカにしたような言い方をしないこと。マナは読めますが。

もしライブラリが常にアンロードされているなら、なぜ "私の "FreeLibraryコールは、あなたによると "多くの場合 "動作しないのでしょうか?deinit()ブロックの中でFreeLibraryを余分に呼び出すと、どんな害があるのでしょうか?FreeLibrary()の呼び出しが、ライブラリのリリースをブロックするのかもしれませんね。 クールなハッカーおじさん、そして明確な1人ですね。

当たり前のことなんですけどね。dllのアンロードに加えて、インジケータ(エキスパート)の非初期化の実装は、それに直接関係するものであれば何でもよく、dllの不正なリリースはハックに変わり、ひいては端末の正しい動作を保証するものではありません。


>> だから、頑張って、挑戦し続けてください。

2All:彼を管理者として雇おうとは思わないでください。