C ++ 디 컴파일러가 있습니까? [닫은]


116

C ++ 소스 코드를 잃어버린 프로그램이 있습니다. 좋은 C ++ 디 컴파일러가 있습니까?

나는 이미 부메랑을 만났다 .


objdumpLinux 용
Stypox

1
cutter.re에 대한 훌륭한 GUI 및 훌륭한 내장 디 컴파일러
Misiur

답변:


80

Hex-Rays로 IDA Pro 를 사용할 수 있습니다 . 디버깅 정보로 컴파일하지 않으면 일반적으로 바이너리에서 좋은 C ++를 얻을 수 없습니다. 코드를 뒤집는 데 많은 수작업 을 할 준비를 하십시오.

바이너리를 제거하지 않았다면 IDA Pro가 작업 할 수있는 C와 유사한 코드를 생성 할 수 있기 때문에 희망이 있습니다. 일반적으로 적어도 몇 년 전에 사용했을 때는 매우 거칠다.


26
명확히하기 위해 IDA는 분해 만 제공합니다. 가능한 한 C / C ++ 소스로 나머지 과정을 디 컴파일하는 Hex-Rays라는 추가 기능이 있습니다.
davenpcj

2
문서를 읽을 때 hex-ray는 의사 코드처럼 C 만 출력합니다. 그렇다고 C ++의 압축 해제에 쓸모가없는 것은 아닙니다. 컴파일러가 C ++ 구조를 변환하는 방법에 대해 조금만 알면됩니다.
Michael Anderson

좀 더 명확히하기 위해, Disassembly는 Hex-Rays로 디 컴파일 할 수있는 가장 큰 것입니다. ASM은 C ++로 번역됩니다. ASM은 모든 프로그램이 ASM으로 실행될 수 있기 때문에 모든 프로그래밍 언어로 번역 될 수 있습니다
Barkermn01

4
눈사람은 무료로 좋은 C ++ 디 컴파일러입니다
잉가

2
Snowman의 경우 +1이지만 다른 사람들이 언급했듯이 간단한 Hello, World 조차도 디 컴파일되면 사실상 읽을 수 없게됩니다.
bdetweiler

25

정보는 컴파일 과정에서 폐기됩니다. 디 컴파일러가 클래스와 모든 것을 가지고 논리적으로 동등한 코드를 생성 할 수 있다고하더라도 (아마도 불가능할 것임), 자체 문서화 부분은 최적화 된 릴리스 코드에서 사라집니다. 변수 이름, 루틴 이름, 클래스 이름 없음-주소 만 있습니다.


25
프로그램의 "영혼" "... 그것의 이전 각자의 단지 빈 껍질, 사라
DARSHAN Chaudhary에게

21

예, 그러나 그들 중 누구도 노력할만한 가치가있는 충분한 코드를 생성하지 못할 것입니다. 이전 앱을 처음부터 다시 작성하는 것보다 내부에 어셈블러 블록이있는 디 컴파일 된 소스를 읽는 데 더 많은 시간을 할애 할 것입니다.


6

C ++ 코드를 생성하는 디 컴파일러를 본 적이 없습니다. C 코드 생성을 합리적으로 시도하는 몇 가지 실험적인 것을 보았지만 특정 컴파일러의 코드 생성 패턴 일치에 의존하는 경향이 있습니다 (변경되었을 수 있습니다. 마지막으로 조사한 지 오래되었습니다. ). 물론 모든 상징적 인 정보는 사라질 것입니다. "디 컴파일러"를위한 Google.


4

원본 코드가 얼마나 크고 잘 작성되었는지에 따라 좋아하는 언어 (여전히 C ++ 일 수 있음)로 다시 시작하고 마지막 버전에서 저지른 실수로부터 학습하는 것이 좋습니다. 누군가 버리기 위해 쓰는 것에 대해 한 번 말하지 않았습니까?

nb 분명히 이것이 거대한 제품이라면 시간의 가치가 없을 수도 있습니다.



24
Joel은 훌륭한 칼럼니스트이지만 때로는 틀립니다. 그리고 그가 잘못 인용했을 때가 있습니다. 여기처럼 질문은 소스 코드의 손실을 중심으로하기 때문입니다. Joels 기사는 소스 코드가 중요한 이유를 설명합니다.
MSalters

5
누군가 버리기 위해 쓰는 것에 대해 한 번 말하지 않았습니까? 네, 그는 마음을 바꿨습니다. davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] n 1975, 저는 프로그래머들에게“첫 번째 버전을 버리고”두 번째 버전을 만들라고 조언했습니다. 하나. 반복이 훨씬 건전한 방법입니다 증분 20 주년 에디션, 나는 그 일정을 실현
ta.speot.is
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.