2016-10-18 2 views
1

特定の変数のすべてのメモリをnasm経由でスキャンしようとしています。 私の現在のコードは、ビットのようになります。すべての物理メモリをスキャンする

%include "io64.inc" 
%define VAR 1234 
section .text 
global main 
main: 
    mov  rax, 0x0 
nxt: 
    mov  rbx, [rax] 
    cmp  rbx, VAR 
    je  end 
    inc  rax 
    jmp  nxt 
end: 
    PRINT_HEX 8,rax 
    ret 

私の問題は、これが(開始アドレスに応じて、それは数サイクルを実行し、失敗する可能性があります)、遅かれ早かれ、セグメンテーションフォールトを生成しています。それを行う方法についてグーグル・グーグルで語ったとき、私はその話題に対して何の答えも見つけられなかった。私はcsとssの登録簿が何かをしなければならないかもしれないと思うが、正確に私が知らない。 私はチートエンジンがそれを行うことができるので、それを行う方法がなければならないことを知っています。

tl; dr セグメンテーションフォールトの取得中にメモリを読み込もうとしました。どうすればそれらを避けることができますか?その他の選択肢は何ですか? (好ましくは管理者権限を必要とせずに)

追加情報:

  • OS:勝利10 Proの64ビット
  • CPU:インテル(R)Core(TM)[email protected] 2個のコア、4つのスレッド
  • RAM:8ギガバイトDDR3

最初のいずれかの答えを

+2

Windowsのユーザーモードプログラムからすべての物理メモリをスキャンすることはできません。実際にスキャンしているものは仮想メモリであり、プロセスに割り当てられたメモリだけが表示されます。割り当てられていない仮想アドレス空間のどの領域もマップされず、アクセスしようとするとセグメント化障害が発生します。 –

+0

@RossRidgeありがとう^^。それを回避する方法はありますか?それとも、トピックについて読むために私をリンクすることができますか? – Ayren

+0

あなたはプロセスを開いてそのメモリを読むことができます。それはそれが意図のようです – harold

答えて

0

最初のものをありがとう:あなたはそのOS上で実行されています仮想メモリを使用し、プロセスは仮想アドレスのアドレスでしか動作せず、他のプロセスのアドレス空間とは別のアドレス空間(一部の共有読み取り専用ページを除く)があります。

これは、OSがさらされる可能性があり、特別なAPIを禁止することは、単にあなたがユーザ空間プログラムからのすべての物理メモリをスキャンすることができる方法はありませんことを意味します。

なぜこれが良いのか分かります。 OSがランダムなユーザスペースのprorgamsに物理メモリ全体をスキャンさせることが許されていれば、それはセキュリティの巨大な違反になります。

まだマップされていない仮想アドレスにアクセスしているため、プログラムがクラッシュしています。

関連する問題