ブログ

9 3月 2017

ソフトウェア開発:フックとは何ですか?

ソフトウェア開発:フックとは何ですか?

私たちはいくつかの種類のフックについて知っておくべきです。

フックとは何ですか?ソフトウェア開発では、フックはプログラムの実行を変更することを可能にするアイデアです。 可能性コードは、比較クラスのコードを変更することなく、何かの最初の実行を変更することができます。 これは、フック戦略を上書きすることで終了します。

この種の使用法は、アプリケーションに新しい機能を追加することに非常に役立ち、システムの代替手順とメッセージの対応をさらに促進します。 フックは、システムが各メッセージに対して実行する必要のある準備負荷を拡張することによって、システムの実行を軽減する傾向があります。 できるだけ早く必要な時に避難させてください。

あなたが外部の人から顧客管理システム(CMS)を利用していると想定し、別の投稿が配信されるたびにスーパーエグゼクティブに電子メールで注意を促し、この行為がデバイスのデフォルトではないことを望むかもしれません。 いくつかのルートがあります:

CMSのソースコードを変更するスマートな思考ではない、あなたの変更を失うの難しさに直面するか、すべてを更新する能力を持っていないデバイスの次のリフレッシュの後にすべてです。

  • あなた自身の特定のCMSを作ることは別のひどい考えです、すべてのことが考慮され、あなたは新しいものを作るのに十分なエネルギーや資産を持っていないか、
  • フックを利用する可能性を探る、つまり、CMSがモジュールやモジュールの外部を調べて、提供された名前の要素が欲しいときに実行されるかどうか、この状況では新しい投稿の配布を確認します。
  • フックを利用する地面の一部分は、一般的に装置ごとに変動する。 フックの原理的な好ましい位置は、最初のコードを変更することではありません。 断続的な更新を持っているすべてのオープンソースデバイスのすべての偉大な練習マニュアルでは、それ自体を再ハッシュするマントラは中心を変えません。 リフレッシュが想像を絶するにもかかわらず、後にアップキープする人は、その変化を考えないだろうし、それについてほとんど触れない人は、あなたではなく装置である。

拡張性は、アプリケーションがその安定したインタフェースを増強することを可能にするフック戦略を利用する別の好ましい立場である。 フック戦略は、安定したインタフェースを分離し、特定の設定のアプリケーションのインスタンス化から出現することができる多様な空間を実行します。

革新的な技術ソリューション インドのデリーNCRグルガオンでソフトウェア開発トレーニングを提供しています。

デザインパターンとしてのフック

多数の(すべての)アウトラインデザインがフックのセマンティクスを例示していることに注目するのは興味深い。 問題領域のサブシステムをどのように実行するかについて話します。 ファクトリ、ビルダー、コマンド、インタプリタ、オブザーバ、プロトタイプ、ステート、ストラテジーなど、分離開発のルールに依存するものもあります。

統一とパーティション開発の両方の例:テンプレートメソッドとブリッジ。

セマンティクスは通常、フック技術名で伝えられます(たとえば、コマンドでは戦略はexecute()と呼ばれます)。

 

仮想メソッドテーブルフック

ソフトウェア開発 - Hook-Pointとは何ですか?1Virtual技術は静的戦略から区別できない経路に持ち込まれますが、バーチャルテクニックを変更することができるため、コード内で特定の仮想容量​​のアドレスを知ることはできません。 したがって、コンパイラは、実行時に容量アドレスに問い合わせる方法を提供するVirtual Method Table(VMT)をアセンブルします。 すべての単一の仮想戦略は、VMTを介して実行時にアクティブ化されます。 質問のVMTには、その前駆体のためのすべての仮想戦略、さらにそれが宣言するものが含まれています。 したがって、バーチャルテクニックでは、素早く実行されるという事実にもかかわらず、要素戦略よりも多くのメモリを使用します。

VMTは、インターフェイス容量のメモリアドレスを持つポインタを含むテーブルであるため、最初のメモリアドレスを正当なフック作業のアドレスに置き換える必要があります。 これらの行に沿って、呼び出されたテクニックは上書きされ、新たな欲望の行為が実行されます。

 

フックAPI

ソフトウェア開発 - Hook-Pointとは何ですか?2The Hooking APIプロシージャは、実際に作業システムの要素を再開発することを可能にします。 そのような料金を徴収する機能を使用すると、最初に実行されるアクティビティを変更することによってパラメータを変更することができます。

たとえば、特定のレコードを取り消し、アプリケーションを実行しないようにしたり、サークルにアーカイブを保存するなどのクライアントの確認を求めることが考えられます。

実際、ウイルス対策やスパイウェア対策など、セキュリティの分野で最も大きな決定が下されています。 可能であれば、Hooking APIが主要な方法であることができる我々の通常の開発環境があります。

プログラミングインターフェース私たちの特定の状況では、OSやDLLからAPIを取得し、典型的な実行を別の場所に、もっと正確には別の容量に変更することを意味します。 基本的に2つの方法があります。

EATとIAT:すべてのEXE / DLLにはインポートテーブルと料金テーブルのAPIが含まれています。 これらのテーブルには、APIエントリポイントを示すポインタが含まれています。 これらのポインタを変更することで、コールバックを示すようにして、私たちはフックを持っています。 可能であれば、このEXE / DLLがAPIをインポートしないと、この戦略は機能しません。

簡単なコードの上書き:前にも述べたように、APIコードの開始に向けてコールバックにコールを追加することが考えられる場合、APIを呼び出された時点で容量を稼働させることができます。 可能であれば、問題があります。コードを処理した後、最初のAPIを呼び出す必要があり、コールバックに戻ってスタック・フラッドが作成されることになります。 1つの方法は、フックがAPIを呼び出す能力を持つようにフックを修正し、実行後に再試行する方法です。 この中心地の中で、いくつかのAPI呼び出しを行うことができ、コールバックを実行することはできません。

インラインフックは、キャパシティの主要なガイドラインを取得するポイントであり、私たちは、ジャンプ、プッシュまたはコールのためにトレードする。

既定の読み込み:Windowsの作業システムは、さらにフッキングAPIの基礎となります。 Windows APIのフック機能の仕組みを知っておく必要がありますか?

 

機会に遭遇する

ソフトウェア開発 - フックポイントとは何ですか?3Asフック技術は、安定したインターフェイスを切り離し、特定の設定のアプリケーションのインスタンス化から出現することができる多様な空間の動作は、制御の逆転が発生します。 オブジェクトの機会のハンドラは、準備ステップを変更します。 その日の終わりに、機会が起こると、ハンドラは、特定の機会を準備している活動を実行する事前登録されたオブジェクトに対して、魅力的なフック戦略に応答する。 機会の場合:ウィンドウメッセージ、通信ポートからのバンドル。

 

IATフックの内部

ソフトウェア開発 - Hook-Pointとは何ですか?Windowsの4Eachプロセスには、各手順のDLLによって送信される容量へのポインタを格納するImport Address Table(IAT)というテーブルがあります。 このテーブルには、実行時にDLLの要素のアドレスが順番に設定されます。

特定の容量を使用して、IATテーブルを書き込み可能にすることができます。カスタム容量のアドレスによってアドレスを変更し、この変更後にテーブルを読み取り専用に再表示することも考えられます。 プロシージャが容量を呼び出そうとする時点で、そのアドレスがIATテーブルに取得され、ポインタが返されます。 IATテーブルが変更されると、カスタム容量が最初の容量の設定になり、プロシージャに注入されたコードが取得されます。

 

Netfilter Hook

ソフトウェア開発 - フックポイントとは何ですか?5Netfilterは、2.4よりも注目すべきLinuxピースサブシステムです。 バンドル分離、NAT、ファイアウォール、リダイレクションなどを担当しています。 Netfilterは非常に拡張性があり、ドキュメントは完成しています。 カーネルコードでフックを利用する可能性が残されており、その利用は非常に柔軟性があり、一般的にグループに受け入れられます。 これらのフックは考えられるいくつかの結果を残し、特定の機会のためのトリガーとして記入することができます。

 

結論:

ソフトウェア開発 - フックとは - 結論フックプログラミングの手順は効果的であり、ソフトウェアエンジニアにとって考えられる結果の範囲を広げますが、手順の流れの中でより顕著な複雑さを含み、最初のものを変更するので、 OS、アプリケーションまたは他のソフトウェアセグメントの行為、ソフトウェアの論理的根拠を理解することが困難になる。 それ以外では、この記事で先に述べたように、パラダイムのないこれらのシステムを利用すると、アプリケーションの実行が低下する可能性があります。

返信を残します

 
GTranslate Please upgrade your plan for SSL support!
GTranslate Your license is inactive or expired, please subscribe again!