역컴파일러 - 위키백과, 우리 모두의 백과사전 역컴파일러 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 역컴파일러 ( 영어 : Decompiler ) 는 컴파일러와 반대의 역할을 하는 컴퓨터 프로그램이다. 즉, 이것은 상대적으로 저수준의 추상에 있는 프로그램의 코드를 고수준의 추상으로 변형한다. 역컴파일러는 보통 원본 소스코드로 완벽하게 재구성될 수 없으며, 결과가 매우 다양할 수 있다. 그럼에도 불구하고 이것은 소프트웨어 리버스 엔지니어링에서 매우 중요한 도구이다. 역컴파일러는 실행 파일을 입력으로 갖고, 같은 기능을 하는 소스 코드 파일 즉, 고급 언어로 만든다. 목차 1 도입 2 디자인 2. 1 로더 2. 2 디스어셈블리 2. 3 관용구 2. 4 프로그램 분석 2. 5 데이터 흐름 분석
owski, Jerome ; Hendren, Laurie ( 2002 ). 〈 Decompiling Java Bytecode : Problems, Traps and Pitfalls 〉. R Nigel Horspool. 《 Compiler Construction : 11th International Conference, proceedings / CC 2002 》. Springer - Verlag. 111 - 127쪽. ISBN 3 - 540 - 43369 - 4. ↑ Cifuentes, Cristina ; Gough, K. John ( July 1995 ). " Decompilation of Binary Programs ". 《 Software Practice and Experience 》 25 ( 7 ) : 811 - 829. doi : 10. 1002 / spe. 4380250706. CiteSeerX : 10
구조화된 코드로 변환하는 것은 이미 구조화된 코드를 변환하는 것보다 훨씬 어렵다. 해결법으로는 몇몇 코드를 자기복제하거나 불리언 변수들을 추가하는 것이 있다. [ 5 ] 코드 생성 [ 편집 ] 마지막 단계는 역컴파일러의 백엔드에서 고급 언어를 생성하는 것이다. 컴파일러가 여러 다른 아키텍처에 따른 여러 다른 기계어를 생성하는 백엔드를 가지듯이 역컴파일러도 여러 고급 언어 별로 생성할 수 있는 백엔드를 갖는다. 코드 생성 바로 직전에 GUI 형태를 사용하여 IR의 상호적인 수정을 허용하는 것이 바람직하다. 이것은 사용자에게 주석을 달거나 포괄적이지 않은 변수와 함수 이름들을 집어넣게 할 수 있다. 그러나 이것들은 역컴파일링 후에 하는 것처럼 쉽게
특수 문서 목록고유 링크문서 정보위키데이터 항목이 문서 인용하기 인쇄 / 내보내기 책 만들기PDF로 다운로드인쇄용 판 다른 언어 [UNK] 日 本 語 [UNK] 中 文 링크 편집 이 문서는 2018년 9월 8일 ( 토 ) 20 : 09에 마지막으로 편집되었습니다. 모든 문서는 크리에이티브 커먼즈 저작자표시 - 동일조건변경허락 3. 0에 따라 사용할 수 있으며, 추가적인 조건이 적용될 수 있습니다. 자세한 내용은 이용 약관을 참고하십시오. [UNK] 미국 및 다른 국가에 등록되어 있는 Wikimedia Foundation, Inc. 소유의 등록 상표입니다. 개인정보 정책 위키백과 소개 면책 조항 개발자 쿠키 정책 모바일 보기
《 Information technology law 》 3판. Cavendish. ISBN 1 - 85941 - 756 - 6. ↑ 외부 링크 [ 편집 ] ( 영어 ) Decompilers and Disassemblers - Curlie ( DMOZ 기반 ) 원본 주소 " " 분류 : 컴파일러유틸리티 소프트웨어 종류숨은 분류 : 영어 표기를 포함한 문서 둘러보기 메뉴 개인 도구 로그인하지 않음토론기여계정 만들기로그인 이름공간 문서토론 변수 보기 읽기편집역사 보기 더 보기 검색 둘러보기 대문사용자 모임요즘 화제최근 [UNK] 문서 보기임의 문서로도움말기부 도구 여기를 가리키는 문서가리키는 글의 최근 [UNK] 올리기특수 문서 목록고유 링크문서 정보위키데이터 항목이 문서 인용하기 인쇄 / 내보내기 책 만들기PDF로 다운로드인쇄
eax, [ ebx0x04 ] add eax, [ ebx0x08 ] sub [ ebx0x0C ], eax 은 표현 전달 이후로 아래와 같은 IR로 바뀔 수 있다. m [ ebx12 ] : = m [ ebx12 ] - ( m [ ebx4 ] m [ ebx8 ] ) ; 결과를 표현한 것은 더 고급 언어와 닮았으며 기계어 레지스터 eax의 사용을 제거하였다. 분석 이후 ebx 레지스터도 제거될 것이다. 데이터 흐름 분석 [ 편집 ] 레지스터 내용들이 정의되고 사용되는 곳은 데이터 흐름 분석을 통해 추적될 수 있어야 한다. 같은 분석은 임시 변수 그리고 로컬 데이터가 사용하는 위치에도 적용될 수 있다. 그 후 다른 이름은 값 정의 집합과 사용에 연결되어 구성된다. 같
1 도입 2 디자인 2. 1 로더 2. 2 디스어셈블리 2. 3 관용구 2. 4 프로그램 분석 2. 5 데이터 흐름 분석 2. 6 타입 분석 2. 7 구조화 2. 8 코드 생성 3 합법성 4 각주 5 외부 링크 도입 [ 편집 ] 역컴파일링은 잃어버린 소스 코드를 되찾거나, 컴퓨터 보안 그리고 오류 검출 정정 등의 과정에서 유용하게 사용된다. [ 1 ] 역컴파일링의 성공은 현재 코드에 존재하는 정보와 얼마나 세련된 분석을 했는지에 달려 있다. 바이트코드 형식은 종종 확장된 메타데이터와 높은 수준의 특징들을 포함하기 때문에 역컴파일의 성공이 가능할 수 있다. 디버그 데이터의 존재는 원본 변수와 구조체 이름들 그리고 줄 번호까지도 재생산 하는 것을 가능케 할 수 있다. 이런 메타데이터나 디버그 데이터 없이 기계
은 구조체나 배열들의 인식을 촉발하는 것으로 인식될 수 있다. 그러나 기계어나 C 같은 고급 언어들의 포인터 연산을 허용하는 자유 때문에 많은 가능성을 구별하는 것은 어려운 일이다. 앞의 섹션에서의 예는 다음과 같은 급 언어로 귀결될 수 있다. struct T1 * ebx ; struct T1 { int v0004 ; int v0008 ; int v000C ; } ; ebx - > v000C - = ebx - > v0004 ebx - > v0008 ; 구조화 [ 편집 ] 역컴파일링의 끝에서 두 번째 단계는 IR을 구조화하여 while 루프와 if / then / else 조건부 선언 같은 고급 구조체로 만드는 것이다. 예를 들면 기계어는 아래와 같다. xor eax,
: 811 - 829. doi : 10. 1002 / spe. 4380250706. CiteSeerX : 10. 1. 1. 14. 8073. ↑ Mycroft, Alan ( 1999 ). 〈 Type - Based Decompilation 〉. S. Doaitse Swierstra. 《 Programming languages and systems : 8th European Symposium on Programming Languages and Systems 》. Springer - Verlag. 208 - 223쪽. ISBN 3 - 540 - 65699 - 5. ↑ C. Cifuentes. ↑ Rowland, Diane ( 2005 ). 《 Information technology law 》 3판. Cavendish. ISBN 1 - 85941 - 756 - 6. ↑ 외부
와 구조체 이름들 그리고 줄 번호까지도 재생산 하는 것을 가능케 할 수 있다. 이런 메타데이터나 디버그 데이터 없이 기계어를 역컴파일링하는 것은 훨씬 어렵다. [ 2 ] 몇몇 컴파일러들은 난독화 코드를 만드는데 이걸로 인해서 실행 파일을 리버스 엔지니어링하는 것은 매우 어려워 진다. 디자인 [ 편집 ] 역컴파일러는 역컴파일 과정에서 각각의 특별한 과정을 수행하는 것들의 집합으로 생각될 수 있다. 로더 [ 편집 ] 첫 번째 역컴파일 단계는 입력된 기계어나 중간 언어 프로그램의 바이너리 형식을 로드하고 분석하는 것이다. 이것은 펜티엄, 파워PC 같은 아키텍처와 엔트리 포인트 같은 입력된 프로그램의 기본 사실들을 발견하는 것이 가능해야 한다. 많은 경우에 C의 main 함수 ( 유저가 쓴
역컴파일러(영어: decompiler)는 컴파일러와 반대의 역할을 하는 컴퓨터 프로그램이다. 즉, 이것은 상대적으로 저수준의 추상에 있는 프로그램의 코드를 고수준의 추상으로 변형한다. 역컴파일러는 보통 원본 소스코드로 완벽하게 재구성될 수 없으며, 결과가 매우 다양할 수 있다. 그럼에도 불구하고 이것은 소프트웨어 리버스 엔지니어링에서 매우 중요한 도구이다. 역컴파일러는 실행 파일을 입력으로 갖고, 같은 기능을 하는 소스 코드 파일 즉, 고급 언어로 만든다.