問題タブ [mprotect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - _thiscallをフックとして迂回して使用する(GCC呼び出し規約)
私は最近、迂回機能(Linuxのみ)に取り組んでおり、これまでのところ大きな成功を収めています。これを見つけるまで、私は自分の迂回クラスを開発していました。私はコードを少し現代化し、それをC ++に変換しました(もちろんクラスとして)。このコードは、他の迂回実装と同じように、元の関数アドレスを、自分で指定した「フック」関数のJMPに置き換えます。また、元の関数の「トランポリン」を作成します。
すべてが完璧に機能しますが、簡単な調整を1つ行いたいと思います。私は純粋なC++でプログラミングし、グローバル関数を使用せず、すべてがクラスに囲まれています(Java / C#のように)。問題は、この迂回方法が私のパターンを壊してしまうことです。「フック」関数は静的/非クラス関数である必要があります。
私がやりたいのは、_ thiscallフックのサポートを実装することです(これは、GCC _thiscall規則を使用すると非常に簡単になるはずです)。_thiscallフックで動作するようにこのコードを変更することに成功していません。最終結果として私が欲しいのは、これと同じくらい単純なものです。PatchAddress(void * target, void * hook, void * class);
。私は誰かにこれをしてくれるように頼んでいませんが、私の問題を解決/アプローチする方法を知りたいですか?
私が知っていることから、「パッチ」サイズを増やすだけでよく(つまり、5バイトになり、さらに5バイトが必要ですか?)、JMP呼び出しを使用する前に(フック関数に対して)、 'this'ポインターをスタックにプッシュします(これは、メンバー関数として呼び出したかのようになります)。説明する:
'jmp'を直接/のみ呼び出す代わりに。それは正しいアプローチですか、それとも考慮に入れる必要のある他の何かがありますか(注:VC ++ _thiscallのサポートについては気にしません)?
注:これが上記のコードの私の実装です:ヘッダー:ソース、libudis86を使用します
c - メモリ ブロックの C 書き込み/読み取り検出
誰かが割り当てメモリアドレスへの書き込みを検出する方法を知っているかどうか尋ねたい.
最初に、sigaction と一緒に mprotect を使用して、書き込み/読み取り操作が行われたときにセグメンテーション違反を強制しました。
いくつかの中で、このアプローチの2つのマイナス要因:
- セグメンテーションフォールトを通過するのが難しい
- mprotect のメモリ アドレス パスは、ページ境界に揃える必要があります。つまり、このメモリ アドレスを単純な malloc で処理することはできません。
問題を明確にするには:
クラスター環境用に C でアプリを構築します。ある時点で、ローカルホストでバッファを呼び出してデータを割り当てるメモリを割り当てます。このバッファはリモート ノードに送信され、同じ手順になります。同じ時点で、このバッファはリモート ノードで書き込み/読み取りが行われますが、いつ (DMA を使用してバッファの書き込み/読み取りを行うか) はわかりません。ローカル ホストには、バッファの変更について通知する必要があります。上で言ったように、私はすでにいくつかのメカニズムを使用しましたが、それらのどれも何らかの能力でそれを処理することはできません. 今のところ、アイデアが欲しいだけです。
ここでのさまざまなアイデアは大歓迎です。
ありがとう
c - mmap でマップされ、mprotect で使用されるメモリ
スレッドにメモリ領域を提供し、メモリ管理の基本概念を適用する必要があります。アイデアは、スレッドローカルストレージを作成し、書き込み、読み取り、クローン、および消去で管理することです。問題は、TLS のスレッドに関連付けられているページを mprotect で保護解除しようとすると、エラーが発生することです。これは私の構造です:
各ページの割り当て
mmap によってマップされますが、このコードでページを保護しようとすると (または保護を解除すると、同じエラーが発生し、初めて試みます)
そしてメソッド tls_unprotect:
保護方法は同じです。
エラー番号コードは 12 です。
どんな種類の助けにも感謝します。ありがとう。
c - Linux c mmap/mprotect の問題
読み取り/書き込みのためにページを保護する必要がある小さなswを実行する必要があり、メモリがアクセスされると、カウンターをインクリメントして読み取り/書き込みを許可する必要があります。その後、メモリを元に戻す必要があります
私はこのコードを持っていますが、無限ループを引き起こしています
c - numa: ネクストタッチ ポリシー
NUMA システムで「mprotect」を使用して「next-touch」ポリシーを実装する方法を説明できる人はいますか? 整数の配列 A があるとします。「mprotect」を使用して保護します。次に、スレッドがそれにアクセスしようとするたびに、アクセスしようとしている単一のアドレスに関する情報のみが得られます ( c-sigsegv-handler-mprotect )。次に何をすればいいですか?「ネクストタッチ」ポリシーに従って必要なすべての手順を(最初から)説明できる人がいれば、それは素晴らしいことです。
xcode - MakeCodeWritable
こんにちは。
私は本で以下のコードを手に入れました。実行しようとしていますが、MakeCodeWritable関数の「最初」と「最後」のパラメーターが何であるか、またはそれらをどこで見つけることができるかわかりません。誰かが助けることができますか?このコードは、C難読化メソッドに関するものです。XcodeプログラムとLLVMGCC4.2コンパイラを使用しています。
mmap - mprotected メモリ アドレスの検出
によってマッピングされた特定の仮想アドレスmmap
が によって保護されているかどうかを検出する機能はありますmprotect
か? が設定されている場合、そのようなアドレスにアクセスすると、セグメンテーション違反が発生しPROT_NONE
ます。したがって、最初にそれらが保護されているかどうかを検出したいと思います。
シグナル ハンドラーを導入する必要がない方がよいでしょう。そのような機能がない場合は、他の軽量ソリューションでも問題ありません。ありがとう。
c - malloc をメモリの特定の領域に制限する方法
次のようなことはありますか?
- 多くの可変サイズのオブジェクトを断片化せずに割り当て/割り当て解除/再割り当てし (基本的には何をするか
malloc
)、 - これらの割り当てに使用されたすべてのメモリ ページを追跡できるので、
- 後で
mprotect
これらのページをすべて読み取り専用にする - できればロックなし - すべてのアクセスはシングルスレッドになります
- Linux と OS X で動作し、できれば Windows で同等のものを使用できますか?
標準のメモリ割り当て関数でこれを行う方法は考えられません。頭に浮かぶ唯一の戦略は、カスタム メモリ プールの代わりに使用することですmalloc
。malloc
だから私の質問は次のとおりです。カスタムまたは(ない場合)何を使用するかについての提案なしでこれを行う方法はありますか?
使用したすべてのページを非常に簡単にラップmalloc
して追跡できますmprotect
。これらのページを呼び出すmalloc
と、割り当てられたブロックの開始前または終了後に「キャッチ」されたメモリを使用しようとしないことを保証するにはどうすればよいですか影響を受けるページの 1 つに含まれていますか?