2

メモリに割り当てられたスペースを取得する任意のサイズのバッファを定義したいと思います。そのバッファに割り当てられたメモリ内の既存のデータを読み取りたい。

次のコードを試してみましたが、毎回特殊文字が表示されるだけです。

DumpIt ツールでメモリのダンプを取り、HEX エディタで開くと、通常の文字 (数字や abc など) が表示されます。

ここで最初に言及した2 つの手法を使用する次のコードを使用し、2 つ目は単純な配列を使用して各文字を 1 つずつ調べます。

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <process.h>
#include <time.h>
#include <cstdlib>
#include <stdint.h> 

int main()
{
    int x = 4;
    char arr[400];
    char * src;
    src = arr;

    uint8_t *memory = (uint8_t *) malloc(1000);  
    while(*memory != NULL) {
        printf("Character %c\n", *(memory++));
        memory++;
    }

    while(src != NULL) {
        printf("%c ", *src);
        x++;
        if(x == 1000)
            break;
    }
    printf("And the data stored in memory is %s\n", arr);

    system("PAUSE");
    return 0;
}
4

2 に答える 2

3

malloc を実行すると、そのメモリ セグメントにランダムなものが取得されます。その中には、ASCII で読み取り可能なものにエンコードできないものもあります。「%c」の代わりに「%X」を使用して、メモリ内の 16 進値を出力してみてください。

なぜそんなことをしたいのか、私にはわかりませんが。

于 2012-10-02T20:31:56.653 に答える
1

コードを実行しているシステムの種類を教えてくれませんでしたが (conion.h最悪の事態を恐れさせてください)、まともなシステムでは、そのような「ランダムな」データを取得することは決してありません。システムから取得したすべてのページは、セキュリティ上の理由から消去されます。そうしないと、他のプロセスが残したもの、パスワード、ラブレターなどをすべてのプロセスが読み取ることができるためです。

最終的に、初期化時や別の関数の呼び出し時に、独自のプロセスがヒープまたはスタックに残した疑似ランダムなものが表示される場合があります。しかし、それはあなたがそこから期待できるすべての「ランダム性」です.

要点:

  • のリターンをキャストしないでくださいmalloc
  • あなたのライン

-

printf("And the data stored in memory is %s\n", arr);

あまり意味がありません。この print ステートメントは、最初にヌル文字が検出された時点で印刷を停止します。

于 2012-10-02T20:57:44.283 に答える