バイナリダンプ
| プログラム名 バージョン 機能 実行形式 実行ファイル OS |
:bindump :0.91 :バイナリダンプ :Windows :bindump.exe :Windows |
バイナリデータをダンプします。
ファイルにする場合はリダイレクトをお使い下さい。
※コメント部に'%'が出現した場合のバグを修正しました。
[使い方]
■bindump.exe の実行で簡単な説明が表示されます。
■アドレス、データ、文字コードが表示されます。
■テスト用データ
■ソース
bindump.c bindump_2020_0412.zip
ファイルにする場合はリダイレクトをお使い下さい。
※コメント部に'%'が出現した場合のバグを修正しました。
[使い方]
■bindump.exe の実行で簡単な説明が表示されます。
■アドレス、データ、文字コードが表示されます。
■テスト用データ
■ソース
bindump.c bindump_2020_0412.zip
// コメント付きダンプ
#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define DST_BUF_SIZE 1024
char bin2char(unsigned char); // 0 から 15 を '0' から 'F' に変換する
void ascbufclear(char*); // ASCII表示部クリアー
int len;
int i, dgtct;
char c[16];
char adr[32];
char ascbuf[128];
char guide1[] = { " +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F\n" };
char guide2[] = { "---------------------------------------------------------------------------\n" };
char dststr[DST_BUF_SIZE];
int main(int argc, char *argv[])
{
FILE *fpr;
int i, ic;
unsigned char uc;
long long ll;
int ascofs;
char* fname; // ファイル名
errno_t err;
if (argc != 2) {
printf("コメント付きダンプ \n");
printf("Usage : %s [Fname]\n", argv[0]);
exit (1);
}
fname = argv[1]; // ファイル名
// ファイルオープン
err = fopen_s (&fpr, fname, "rb");
if (err != 0) {
printf ("ファイルリードエラー\n");
printf (fname);
printf ("\n");
exit (1);
}
strcpy(ascbuf, ": "); // 仕切り
dststr[0] = 0;
printf (guide1); //
printf (guide2); // ガイド
dgtct = 0;
c[1] = 0;
ascofs = 0;
// ファイルリード
ll = 0;
while (1) {
if ((dgtct%16) == 0) {
sprintf(adr, "%08X ", ll); // アドレス
strncat(dststr, adr, 10);
ascbufclear(ascbuf); // ASCII表示部クリアー
}
// ASCIIコードセット
ic = fgetc(fpr);
if (ic == EOF) {
break;
}
uc = (unsigned char)ic;
if (0x20 <= uc && uc<= 0x7e) {
if (uc == '%') { // %
ascbuf[ascofs+2] = uc;
ascofs++;
ascbuf[ascofs+2] = uc;
ascofs++;
} else {
ascbuf[ascofs+2] = uc;
ascofs++;
}
} else {
ascbuf[ascofs+2] = '.';
ascofs++;
}
c[0] = bin2char(uc/16); // 上位
strncat(dststr, c, 2);
c[0] = bin2char(uc%16); // 下位
strncat(dststr, c, 2);
c[0] = ' ';
strncat(dststr, c, 2);
dgtct++;
if (dgtct >= 16) {
dgtct = 0;
strncat(dststr, ascbuf, ascofs+2);
strncat(dststr, "\n", 2);
printf (dststr);
dststr[0] = 0;
ascofs = 0;
}
ll++;
}
if ((dgtct%16) != 0) {
for ( i = 0 ; i < ((16-(dgtct%16))*3) ; i++ ) {
strncat(dststr, " ", 2);
}
strncat(dststr, ascbuf, 18+ascofs);
strncat(dststr, "\n", 2);
printf (dststr);
}
// ファイルクローズ
if (fpr != NULL) {
fclose(fpr);
}
exit (0);
}
// 0 から 15 を '0' から 'F' に変換する
char bin2char(unsigned char uc)
{
char c;
if (uc <= 9) {
c = '0'+uc;
} else if (10 <= uc && uc <= 15) {
c = 'A'+(uc-10);
} else {
c = '-'+uc;
printf("ERROR - bin2char()\n");
}
return c;
}
// ASCII表示部クリアー
void ascbufclear(char* ascbuf)
{
int i;
for ( i = 0 ; i < 32 ; i++ ) {
ascbuf[i+2] = ' ';
}
}
|
0 件のコメント:
コメントを投稿