0

自身のヒープ領域を読み取ることができましたか? ソフトウェアはメモリ内で自己修正できますか?

件名を表示するコードをいくつか書きます。

私は自分のコードをメモリで読んでいますか? どのように(可能であれば)それを書き、実行時に命令を変更するのですか?

#include<stdio.h>
#include<stdint.h>

volatile int addressBase;
uint8_t read(int address);


int main(void) {

    printf("Helium word");

    addressBase=(int)&main;        
    printf("[%X]", read( 0 ));         
    getchar();

    return 0;
}


uint8_t read(int address)
{

       const uint8_t *addr;                        
       addr=(const unsigned char *)(addressBase+(int)address);
       return (*addr);
}
4

2 に答える 2

1

メモリは通常、読み取り専用の命令メモリと、実行可能または不可能な書き込み可能なデータ メモリに分割されます。アプリケーションで独自のコード (JIT コンパイラーなど) を作成して実行する場合は、必要なメモリ ブロックを取得するための特定の操作方法を使用する必要があります。はい、あなたは自分の指示を読むことができますが、それらを変更できるとは思えません。

于 2010-08-10T13:11:35.150 に答える
1

ヒープ領域の読み書きは自己責任で行ってください。

自己変更コードは、小さな組み込みシステムのような制限された小さな環境では便利なトリックかもしれません。ただし、最近のデスクトップまたはサーバーの CPU は、命令のキャッシュ、プリフェッチ、およびパイプライン処理を中断するため、自己変更コードをまったく好みません。1 つの逸話: TI-Scheme は 386 個の CPU で非常に高速に動作しました。自己変更コードを使用していました。486 CPU が命令キャッシングを導入し、TI-Scheme がクラッシュしました。

于 2010-08-10T13:23:23.360 に答える