OSでどのメモリ保護機械が使用されているかを確認する方法はありますか?
あるコンピューター(ubuntu)ではセグメンテーション違反で失敗するが、別のコンピューター(RH6)では失敗しないプログラムがあります。
説明の 1 つは、OS によって使用されるメモリ保護メカニズムでした。それを見つけたり変更したりする方法はありますか?
ありがとう、
OSでどのメモリ保護機械が使用されているかを確認する方法はありますか?
あるコンピューター(ubuntu)ではセグメンテーション違反で失敗するが、別のコンピューター(RH6)では失敗しないプログラムがあります。
説明の 1 つは、OS によって使用されるメモリ保護メカニズムでした。それを見つけたり変更したりする方法はありますか?
ありがとう、
仮想メモリ、システム コール、Linux カーネル、ASLRについてもっと学びたいと思うかもしれません。
次に、 mmap および munmapシステム コール (またmprotect )の役割と使用法を調べることができます。それらは、メモリを取得するために使用されるシステムコール (たとえば、malloc
&を実装するため) であり、時には(ますます役に立たない)free
のような時代遅れのシステムコールが使用されます。sbrk
gdb
デバッガー (watch
コマンドが便利な場合があります) とvalgrindユーティリティを使用する必要があります。straceも役立つ場合があります。
/proc疑似ファイル システムの内部も調べます。何を理解しようとする
cat /proc/self/maps
はあなたに言っています(それを実行しているプロセスについてcat
)。中も見て/proc/$(pidof your-program)/maps
pmapユーティリティの使用も検討してください。
それが独自のソース コードである場合は、常にすべての警告とデバッグ情報を含めてコンパイルします。たとえばgcc -Wall -Wextra -g
、コンパイラが警告を出さなくなるまで改善します。gcc
(つまり 4.7) とgdb
(つまり 7.4)の最新バージョンを使用します。