2012-04-01 9 views
2

私はずっと前にインターネットで公開されたプロジェクトを活用しました。ここに細部があります。すべての無関係なものは、簡潔さと明快さのために取り除かれています。外部ファイルからロードされたコードの一部の実行がDEPによって停止されないのはなぜですか?


そのコンテンツ

HEXダンプの下descibedさバイナリファイル:

55 89 E5 83 EC 08 C7 45 FC 00 00 00 00 8B 45 FC 
3B 45 10 72 02 EB 19 8B 45 FC 8B 55 0C 01 C2 8B 
45 FC 03 45 08 8A 00 88 02 8D 45 FC FF 00 EB DD 
C6 45 FA 00 83 7D 10 01 76 6C 80 7D FA 00 74 02 
EB 64 C6 45 FA 01 C7 45 FC 00 00 00 00 8B 45 10 
48 39 45 FC 72 02 EB E2 8B 45 FC 8B 4D 0C 01 C1 
8B 45 FC 03 45 0C 8D 50 01 8A 01 3A 02 73 30 8B 
45 FC 03 45 0C 8A 00 88 45 FB 8B 45 FC 8B 55 0C 
01 C2 8B 45 FC 03 45 0C 40 8A 00 88 02 8B 45 FC 
03 45 0C 8D 50 01 8A 45 FB 88 02 C6 45 FA 00 8D 
45 FC FF 00 EB A7 C9 C2 0C 00 90 90 90 90 90 90 

var 
    MySrcArray, 
    MyDestArray: array [1 .. 15] of Byte; 

    // ... 

    MyBuffer: Pointer; 

    TheProc: procedure; 
    SortIt: procedure(ASrc, ADest: Pointer; ASize: LongWord); stdcall; 
begin 
    // Initialization of MySrcArray with random Bytes and display here ... 

    // Instructions of loading of the binary file into MyBuffer using merely **GetMem** here ... 

    @SortIt := MyBuffer; 

    try 
     SortIt(@MySrcArray, @MyDestArray, 15); 

     // Display of MyDestArray (The outcome of the processing !) 
    except 
    // Invalid code error handling 
    end; 

    // Cleaning code here ... 
end; 
をスニペット以下 方法を使用して、メモリにロードされ、実行されます

は私の箱の魅力のように機能します。


私の質問:

どのようにそれはVirtualAllocおよび/またはVirtualProtectを使用せずに動作していますか?

答えて

4

私はあなたがData Execute Preventionによって停止されることなくこれがなぜ機能するのかと疑問に思っていますか? 32ビットプログラムの場合、DEPはデフォルトでオプトインされます。これは、アプリケーションが明示的に有効にする必要があることを意味します。

DEP設定を「選択したプログラムとサービス以外のすべてのプログラムとサービスに対して有効にする」に変更すると、アプリケーションはDEPの警告とクラッシュを引き起こします。

+0

はい、実際にはDEPと関係があります。 – menjaraz

関連する問題