dump.h

#ifndef _DUMP_H_
#define _DUMP_H_
 
void dumpf( void*, size_t, FILE* ) ;
#define dump( _pt, _sz )        dumpf( _pt, _sz, stdout )

#endif  /* _DUMP_H_ */

dump.c

#include <sys/types.h>
#include <stdio.h>
#include "dump.h"
/*========================================*
 *	dumpf
 *	P1:	dump start pointer
 *	P2:	dump size
 *	P3:	printing file pointer
 *	Re:	(void)
 *========================================*/
void
dumpf( void * pt, size_t size, FILE *fp )
{
	int i, j=1 ;
	char buf[16] ;

	memset(buf, 0, sizeof(buf)) ;
	for( i=0; i<size; i++ ){
		switch(i%16){
		case 0 :
			if(j == 1){
				fprintf(fp, "    %.08x:", ((u_int)pt+i)) ;
				memset(buf, 0, sizeof(buf)) ;
				j = 0 ;
			}else{
				fprintf(fp, "    %.16s\n    %.08x:", buf, ((u_int)pt+i)) ;
				memset(buf, 0, sizeof(buf)) ;
			}
		case 4 :
		case 8 :
		case 12 :
			fprintf(fp, " ") ;
		default :
			fprintf(fp, "%.02x", *(u_char*)((u_int)pt+i)) ;
			buf[i%16] = ((*(u_char*)((u_int)pt+i) == 0x20)
				|| (*(u_char*)((u_int)pt+i) >= 0x20 && *(u_char*)((u_int)pt+i) <= 0x7e))
				? *(u_char*)((u_int)pt+i) : 0x2e ;
		}
	}
	i = (size%16 == 0) ? 16 : size%16 ;
	fprintf(fp, "%*s%.*s\n", ((i%4 == 0) ? 40 : 39)-(i*2)-(i/4), "", i, buf) ;
	return ;
}

[ 編集 | 凍結 | 差分 | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]
Last-modified: 2005-03-18 (金) 01:31:52 (5941d)