Java

This is README file for Jad

_침묵_ 2006. 12. 15. 06:49

This is README file for Jad - the fast Java Decompiler.

Jad home page:http://www.geocities.com/kpdus/jad.html

  2006.12.14 현재 :http://www.kpdus.com/jad.html

Copyright 2001 Pavel Kouznetsov (kpdus@yahoo.com).

 

0. Jad 홈페이지에서disclaimer를 읽어봐라.

 

1. 설치.

 

아무 디렉토리에나 jad.zip 압축 파일을 푼다.

그럼, 두 개의 파일이 생길것이다.:

 

    - 실행 파일 이름은 'jad.exe' (Windows *)

      or 'jad' (*n*x)

 

    - 지금 보고 있는 README 파일

 

설정하는데에 다른 할 일은 없다.

 

2. Jad 사용법

 

'example1.class' 라는 JAVA 파일 하나를 디컴파일하려면 아래와 같이 입력한다.:

 

     jad example1.class

 

그러면, 현재 디렉토리에 'example1.jad' 라는 파일을 만들 것이다.

같은 이름의 파일이 있으면 덮어쓸지 말지를 물어볼 것이다. 옵션으로 -o 를 사용하면 확인절차를 거치지 않는다.

 

입력 파일 이름에서 .class 는 뺄수 있으며, 와일드 카드 같은 것도 사용 가능하다.

 

옵션 -s <ext> 를 사용하면 출력 파일의 확장자를 정의할 수 있다.:

 

     jad -sjava example1.class

 

이렇게 하면 'example1.java' 라는 파일을 만든다. -o 옵션과 -sjava 옵션을 같이 사용할 때는 원래 소스를 덮어쓰지 않도록 주의해야 한다.

 

Jad 는 출력 파일의 이름을 JAVA 클래스 이름을 그대로 사용한다. 예를 들어, 'example1.class' 파일이 'test1' 클래스를 포함하고 있다면 'example1.jad' 대신에 'test1.jad' 파일을 만든다. 파일 이름 마저도 정의하고 싶다면 리다이렉션을 써서 처리할 수 있다.:

 

   jad -p example1.class > myexm1.java

 

옵션 -d 는 출력 파일이 저장될 디렉토리를 설정한다. 기본적으로 현재 디렉토리를 기준으로 경로를 정한다. 예를 들면:

 

   jad -o -dtest -sjava *.class

 

   (혹은jad -o -d test -s java *.class, 둘 다 같은 효과)

 

이 명령은 현재 디렉토리의 모든 .class 파일을 'test'라는 디렉토리에 .java 확장자로 출력 파일을 만들라는 것이다.

 

만약 JAVA 클래스의 전체 트리를 디컴파일하고자 한다면 아래와 같이 입력한다.:

 

   jad -o -r -sjava -dsrc tree/**/*.class

 

이 명령은 'tree' 의 모든 하위 디렉토리에 있는 .class 파일을 디컴파일 해서 'src' 디렉토리에 패키지 구조에 맞춰서 출력 파일을 생성해준다. 예를 들어, 'tree/a/b/c.class' 파일이 패키지 'a.b' 의 'c' 클래스를 정의하고 있다면, 출력 파일은 'src/a/b/c.java' 로 생성될 것이다.

 

앞의 명령에서 두개의 별표('**')를 사용하고 있는데, 이를 Jad 보다 shell 에서 먼저 처리해버리는 수가 있으므로 UNIX 환경에서는 아래 처럼 작은 따옴표를 붙여서 처리한다.:

 

   jad -o -r -sjava -dsrc 'tree/**/*.class'

 

 

디컴파일 결과에 대해 정확성 체크나 의심이 가는 경우에는 -a 옵션을 사용할 수 있다. 이 옵션은 Jad 에게 출력 파일에 JAVA 가상 머신의 바이트 코드를 함께 출력하도록 해준다.

 

Jad 는 내부(inner) 클래스나 익명(anonymous) 클래스를 지원한다. 와일드 카드를 써서 입력 파일을 지정하면 내부 클래스같은 것들은 자동으로 걸러진다(skip). UNIX 의 경우에는 입력 파일이 하나이상(초과)인 경우에 내부 클래스를 걸러낸다(skip). Jad 는 최상위 컨테이너(container) 클래스의 디렉토리에서 내부 클래스를 찾는다.

   When Jad expands wildcards in the input file names,

    it automatically skips matching inner classes.

    On UNIX Jad skips inner classes if there is more than

    one class specified in the command line.

    Jad looks for inner classes in the directory of their top-level

    container class.

 

3. 명령행 옵션.

 

Jad 에서 사용하는 옵션들:

 

   -a       - 출력 파일에 JVM 바이트 코드를 주석으로 포함시킨다. (default: off)

   -af      - 옵션 -a 와 같다, 하지만 주석처리 될 때 완전한 이름(fully qualified names)으로 씌여진다.

   -clear   - 기본적인 것들을 포함해서 모든 prefix 를 지운다. (줄여서 -cl 로 쓸 수 있다.)

   -b       - 괄호를 무조건 표시한다. (e.g., if(a) { b(); }, default: off)

   -d <dir> - 출력 파일의 경로 설정 (필요하면 만든다.)

   -dead    - 코드 상의 필요없는 부분(dead parts)도 디컴파일 한다. (default: off)

   -disass  - 메쏘드 바이트 코드를 역어셈블한다. (JAVA 소스 코드는 만들지 않는다.)

   -f       - 클래스/필드/메쏘드에 완전한 이름(fully qualified names)을 사용한다. (default: off)

   -ff      - 메쏘드를 출력하기 전에 클래스 필드를 출력한다. (default: after methods)

   -i       - 모든 필드를 초기화 한다.

   -l<num>  - 스트링을 최대 <num> 문자 만큼 쪼갠다. (default: off)

   -lnc     - 라인 번호를 주석에 포함한다. (default: off)

   -lradix<num> - 정의된 진법에 맞게 long 값을 표시한다. (8, 10 or 16)

   -nl      - 개행 문자에 스트링을 분리한다. (default: off)

   -nocast  - 보조 캐스팅을 하지 않는다.

   -nocode  - 메쏘드에 대한 소스 코드를 출력하지 않는다.

   -noconv  - 자바 식별자를 바꾸지 않는다. (default: convert)

   -noctor  - 비어있는 생성자는 출력하지 않는다.

   -nodos   - 클래스 파일이 DOS 모드로 작성되었는지 체크하지 않는다. (CR before NL, default: check)

   -nofd    - don't disambiguate fields with the same names by adding signatures to their names (default: do)

   -noinner - turn off the support of inner classes (default: on)

   -nolvt   - ignore Local Variable Table information

   -nonlb   - don't output a newline before opening brace (default: do)

   -o       - overwrite output files without confirmation (default: off)

   -p       - 디컴파일된 코드를 표준출력(STDOUT)으로 표시한다. (e.g., for piping)

   -pi<num> - pack imports into one line after <num> imports (default: 3)

   -pv<num> - pack fields with identical types into one line (default: off)

   -pa <pfx>- prefix for all packages in generated source files

   -pc <pfx>- prefix for classes with numerical names (default: _cls)

   -pf <pfx>- prefix for fields with numerical names (default: _fld)

   -pe <pfx>- prefix for unused exception names (default: _ex)

   -pl <pfx>- prefix for locals with numerical names (default: _lcl)

   -pm <pfx>- prefix for methods with numerical names (default: _mth)

   -pp <pfx>- prefix for method parms with numerical names (default: _prm)

   -r       - restore package directory structrure

   -radix<num> - 정의된 진법에 맞게 integer 값을 표시한다 (8, 10 or 16)

   -s <ext> - 출력 파일의 확장자를 지정한다. (by default '.jad')

   -safe    - generate additional casts to disambiguate methods/fields (default: off)

   -space   - 키워드(if/for/while/etc)나 표현식 사이에 공백을 넣는다. (default: off)

   -stat    - 최종적으로 처리된 클래스/메쏘드/필드의 개수를 표시한다.

   -t       - 인덴트(indentation)로 공백 대신 탭을 사용한다.

   -t<num>  - <num> 만큼의 공백을 인덴트(indentation)로 사용한다. (default: 4)

   -v       - display method names being decompiled

   -8       - convert UNICODE strings into 8-bit strings

              using the current ANSI code page (Win32 only)

   -&       - 표준에러출력(STDERR)을 표준출력(STDOUT)으로 리다이렉트한다. (Win32 only)

 

모든 한글자로 된 옵션은 3가지 형식을 지닌다.:

 

  -o    - 설정된 옵션의 내용을 바꾼다.(reverses)

  -o+   - 설정한다. (set value to 'true' or 'on')

  -o-   - 설정하지 않는다. (set value to 'false' or 'off')

 

자주 사용하는 옵션을 환경 변수 'JAD_OPTIONS' 로 지정해둘 수 있다.

예를 들면:

 

JAD_OPTIONS=-ff+ -nonlb+ -t+ -space+

'Java' 카테고리의 다른 글

HTTPURLCONNECTION를 사용하여 웹 페이지 액세스하기  (0) 2007.01.05
I18N Messages and Logging  (0) 2006.12.07
JDK and TimeZone  (0) 2006.12.07