Dump file

DUMP で出力された内容を ダンプリスト と呼ぶ

ダンプリスト左端はアドレス(ファイル先頭からの位置)

ダンプリスト中央にある16進数(バイト)が列挙されてる部分がマシン語プログラム(バイトコード)を表している。

ダンプリスト右端は、バイトコードをキャラクタコードで表現したときの内容。ただしバイトで表現可能な数値はキャラクタコードの範疇を超えることがあるため、そのような場合はピリオドで表現される。

dump.c

#include <stdio.h>
int main(int argc, char* argv[])
{
    FILE *fp;
    unsigned char buf[16];   /* 読み込みバッファ */
    unsigned long addr = 0;  /* 先頭からのアドレス */
    int readnum, i;

    if(argc <= 1) {
        printf("usage:dump filename\n");
        return 1;
    }
    if(!(fp = fopen(argv[1], "rb"))) {
        printf("file open error.\n");
        return 1;
    }
    while(1) {
        printf("%08x ", addr);
        readnum = fread(buf, 1, 16, fp);
        /* パイナリデータの表示 */
        for(i = 0; i < readnum; i++) {
            if( i == 8)
                 printf("   ");
            printf("%02x ", buf[i]);
        }
        for(i =readnum; i < 16; i++) {
            if(i == 8)
                printf("   ");
            printf("   ");
        }
        printf("   ");
        for(i = 0; i < readnum; i++)
            printf("%c", (32 <= buf[i] && buf[i] <= 126) ? buf[i] : '.');
        printf("\n");
        addr += 16;
        if(feof(fp))
            break;
    }
    fclose(fp);
    return 0;
}

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

a C HTTP Clienta C HTTP Client

C#やJavaでは簡単にhttp Clientプログラムができる。C言語ではソケットを作成するところから必要です。またWindowsとLinux両方対応するように書いたのでプログラムが長くなる。 (bcc32で動作確認済み) プログラムは、最初にsocketを生成してWebサーバに接続し、テキスト形式でHTTPリクエストメッセージを作成してWebサーバに送信する。 HTTPリクエストメッセージは、複数行から成り立つ一連のデータ列。ここでいう1行とは、終端にCR(キャリッジリターン、16進の0x0d)とLF(ラインフィード、16進の0x0a)を持つデータの単位を示す。ほぼ、通常のテキスト・データの1行と等しくなる。メッセージ・ヘッダとメッセージボディ部に分かれ、両者は空行(単独のCR+LF)で分割される。 httpを理解するには、telnetで手入力でHTTPをしゃべってみるがいい方法。 https://www.softel.co.jp/blogs/tech/archives/263 まずプログラムをリストする: #include <stdio.h> /* printf, sprintf */ #include <stdlib.h> /* exit, atoi, malloc, […]

Reverse Polish Notation CalculatorReverse Polish Notation Calculator

逆ポーランド記法 逆ポーランド記法 逆ポーランド記法を使えば、式の計算をする(評価)には、先頭からひとつずつ順番に記号を読み込み、その記号が演算子以外であればスタックに値を積み、演算子であればスタックから値を取り出して演算し結果をスタックに積む、という簡単な操作の繰り返しだけでよい。そのため、プログラミング初心者の練習課題として、逆ポーランド記法の電卓を作ることがよく行われる。 逆ポーランド記法による計算の例 2+3を計算するとき,逆ポーランド記法では,次のように表す.数値や演算子(+, -, *, /)の間にはスペースを設ける. 2 3 + これはいくつかのメモリー(記憶場所)が準備されているとき, 2を1番目のメモリーに記憶 3を2番目のメモリーに記憶 1番目のメモリーの内容と2番目のメモリーの内容を加算 加算結果を1番目のメモリーに記憶 という手順で計算することを表している. 特徴: 日本語の並びと同じ計算順序 逆ポーランドには括弧がない […]

Nim gameNim game

Nim game ニム (nim) は、2人で行うレクリエーション数学ゲームの1つである。ルーツは古代中国からあるとされ、16世紀初めの西欧で基本ルールが完成したが、名前については、一般的に1901年にハーバード大学のチャールズ・L.バウトン (Charles L. Bouton) によって名付けられたとされる。 ゲームルール: 一人1個か2個か3個か4個だけ取れて、交互にやっていって、 最後の1個の石を取った人が負けとなります。 #include <stdio.h> int main(void) { int i, stone, […]