mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monday, April 16, 2007

Java 자바] 헥사 뷰어 소스, 헥사 덤프 만들기; Hex View, File Dump Source Code


자바로, 헥사 뷰어를 만드는 소스 코드입니다. 파일을 이진모드로 열어서, 16바이트씩 읽어 헥사(16진수)로 변환한 후, 출력합니다.

복잡한 기능은 없고 최대한 간단하게 만든 것입니다. 헥사 뷰어라는 것은, 이상하게도, 조그만 기능 하나만 추가해도, 상당히 복잡하게 되는 측면이 있습니다.

헥사 뷰어 만들기 소스 코드


소스 파일명: Example.java
버전 0.8
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
import java.io.*;

public class Example {
  public static void main(String[] args) throws IOException {

    if (args.length == 0) { // args.length 는 옵션 개수
      System.err.println("Input Filename...");
      System.exit(1); // 읽을 파일명을 주지 않았을 때는 종료
    }

    byte[] buf16 = new byte[16]; // 헥사 값이 16바이트씩, 즉, 한줄씩 저장될 버퍼
    int offset = 0; // 번지
    int buf16Len;   // 한줄에 들어있는 헥사 값의 개수, 즉, 길이
    DataInputStream in = new DataInputStream(new FileInputStream(args[0]));

    while ((buf16Len = in.read(buf16)) > 0) {
      System.out.format("%08X:  ", offset); // Offset (번지) 출력

      // 헥사 구역의 헥사 값 16개 출력 (8개씩 2부분으로)
      for (int i = 0; i < buf16Len; i++) {
        if (i == 8) System.out.print(" ");    // 8개씩 분리
        System.out.format("%02X ", buf16[i]); // 헥사 값 출력
      }

      // 한 줄이 16 바이트가 되지 않을 때, 헥사 부분과 문자 부분 사이에 공백들 삽입
      for (int i = 0; i <= (16 - buf16Len) * 3; i++)
        System.out.print(" ");
      if (buf16Len < 9) System.out.print(" "); // 한줄이 9바이트보다 적을 때는 한칸 더 삽입


      // 문자 구역 출력
      for (int i = 0; i < buf16Len; i++) {
        if (buf16[i] >= 0x20 && buf16[i] <= 0x7E) // 특수 문자 아니면 출력
          System.out.format("%c", buf16[i]);
        else System.out.print("."); // 특수문자, 그래픽문자 등은 마침표로 출력
      }

      offset += 16; // 번지 값을 16 증가
      System.out.println(); // 줄바꿈
    }

    if (offset == 0) System.out.format("%08X:  ", offset); // 0바이트 파일일 경우 처리
    in.close();
  }
}



컴파일 및 실행 결과 화면:
클릭한후옆으로스크롤가능
D:\Z>javac Example.java

D:\Z>java Example
Input Filename...

D:\Z>java Example test.bin
00000000:  4D 5A 90 20 03 20 20 20  04 20 20 20 FF FF 20 20  MZ. .   .   ..
00000010:  B8 20 20 20 20 20 20 20  40 20 20 20 20 20 20 20  .       @
00000020:  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20
00000030:  20 20 20 20 20 20 20 20  20 20 20 20 D0 20 20 20              .
00000040:  0E 1F BA 0E 20 B4 09 CD  21 B8 01 4C CD 21 54 68  .... ...!..L.!Th
00000050:  69 73 20 70 72 6F 67 72  61 6D 20 63 61 6E 6E 6F  is program canno
00000060:  74 20 62 65 20 72 75 6E  20 69 6E 20 44 4F 53 20  t be run in DOS
00000070:  6D 6F 64 65 2E 0D 0D 0A  24 20 20 20 20 20 20 20  mode....$
00000080:  64 C7 F9 7C 20 A6 97 2F  20 A6 97 2F 20 A6 97 2F  d..| ../ ../ ../
00000090:  E3 A9 CA 2F 23 A6 97 2F  20 A6 96 2F 77 A6 97 2F  .../#../ ../w../
000000A0:  07 60 EA 2F 30 A6 97 2F  07 60 FA 2F 49 A6 97 2F  .`./0../.`./I../
000000B0:  07 60 F9 2F 02 A6 97 2F  07 60 EF 2F 21 A6 97 2F  .`./.../.`./!../
000000C0:  52 69 63 68 20 A6 97 2F  20 20 20 20 20 20 20 20  Rich ../
000000D0:  50 45 20 20 4C 01 03 20  B8 E3 22 46 20 20 20 20  PE  L.. .."F
000000E0:  20 20 20 20 E0 20 03 01  0B 01 08 20 20 B0 20 20      . .....  .
000000F0:  20 50 20 20 20 20 20 20  CF 1C 20 20 20 10 20 20   P      ..   .
00000100:  20 C0 20 20 20 20 40 20  20 10 20 20 20 10 20 20   .    @  .   .
00000110:  04 20 20 20 20 20 20 20  04 20 20 20 20 20 20 20  .       .
00000120:  20 10 01 20 20 10 20 20  20 20 20 20 03 20 20 20   ..  .      .
00000130:  20 20 10 20 20 10 20 20  20 20 10 20 20 10 20 20    .  .    .  .
00000140:  20 20 20 20 10 20 20 20  20 20 20 20 20 20 20 20      .
00000150:  94 D8 20 20 28 20 20 20  20 20 20 20 20 31 31 31  ..  (        111
00000160:  30                                                0

D:\Z>
D:\Z>java Example test.bin > out.txt

D:\Z>


java Example test.bin > out.txt
이렇게 하면 out.txt 라는 파일로 출력 결과가 저장됩니다.

위에서 test.bin 이란, 뷰어로 볼 아무 이름의 파일을 의미합니다.


참고: ▶▶ [QnA] 헥사 에디터란? 좋은 헥사 에디터(Hex Editor)는? : WinHex




tag: java
자바 | Java

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top