거기에 따르면 C / C + + 코드는 실행 프로그램을 변환하는 것이 decompiler의 희망이 없나요?
이 FAQ는 답변을 밥 스타우트으로 미리보기에서 발췌한 것입니다.
숨들이마셔하지 마십시오. 그것에 대해 생각해 ... a decompiler를 제대로, 중 1) 모든 컴파일러를 실질적으로 동일한 코드를 생성하는 방법, 전체 최적화도 함께하는 것이라고, 또는 켜져 2) 모든 컴파일러의 코드 생성기의 개별 출력을 인식했을 작품.
만약 첫 번째 사건을 해결되어야한다면, 거기 컴파일러는 더 이상 필요 이후 벤치 마크에 대한 모든 것이 하나 같은 작품. 두 번째 경우는 모든 새로운 컴파일러 릴리스를 바꾸려고했을 것이 사실 대단히 복잡한 프로그램에서 필요로한다.
그래서 특정 컴파일러에 대한 특정 decompilers - 대한 decompiler 유일한 코드, 말, 비씨 + + 4.5에 의해 생성된에서 작동하도록 설계라고?이 바로 뒤에 최적화 문제를 잡기 위해서. 코드의 지혜로움에 대해 서면 및 understandability 자주 비효율적이다. 코드의 최대 성능 (속도 또는 크기)에 대한 서면 자주 애매한 (최고!)이 사실은 모든 현대 컴파일러 최적화 스위치의 최적화 기술은 활성화하고있는 피하기 위해 제어하는 무리를 추가합니다. 결론은, 합리적으로, 대량의 복잡한 소스 모듈을 위해, 당신은 단순히 당신의 최적화 스위치 모듈을 변경하여 귀하의 decompiler는 또한 자동으로 인식할 수 있도록해야한다 deoptimizer 다른 개체의 숫자를 생성하도록 컴파일러를 얻을 수있다는 컴파일 시에 최적화 전략이 활성화됐다.
의 추가를 단순화하고 이것은 하나의 특정한 컴파일러를 지원하려고하고 가장 논리적인 소스 코드에 최적화 해석하려하지 않고 디컴파일을 지정할 보자. 그럼 뭐야? 좋은 최적화하고 실질적으로, 그래서 당신의 decompiler의 것이 유일한 암호 안 나가지만, 코드의 내부를 다시 작성할 수있습니다 많은 경우에, 고토 진술과 다른 전혀 - 더 좋은 연습의 코딩으로 가득 차있다. 이 시점에서, 당신은 소스 decompiled 들었지만, 무슨 소용이 있겠어요?
또한 소스 모듈을 조심스럽게 내 참조합니다. C의 한 특성을하지 않는 한 쉽게 maintainable 소스 모듈 (. C 파일)로 나뉩니다 그게 크게 읽을된다. 어떻게 그걸로 decompiler 거래? 그것도 일부 맘모스 main () 함수로 전체 프로그램을 디컴파일, 모든 모듈화를 잃고 시도해 볼 수도, 아니면 자체라는 파일에 각 함수 장소로 시도해 볼 수도있습니다. 그리고 두 번째 문제에 불필요한 혼란을 생성하고 실행할 것이 첫 번째 방법은 여러 가지 기능 정적 데이터 및 / 또는 하나 이상의 기능을 하나 이상의 전화를 정적 함수를 사용하여 파일을 원래의 소스 언각을 이루다. 한 decompiler (이미) 용납되지 않을 정적 데이터 및 / 또는 기능 글로벌하지만 비용이나 난이도에서만 만들 수있습니다.
마지막으로, 그것은 거의 불가능한 상업용 애플 리케이션을 자주 어셈블러에서 C를 동급으로 디컴파일을 증명할 수있는 가장 어려운 또는 시간 - 중요한 기능의 코드를 기억 해요.
내가 말했듯이, 숨들이마셔하지 않습니다. 어디로 기술 decompilers 더, 옵티마 실현이 될 수 있으며, 언어 (C 향상 + +, 예를 들어, C보다 상당히 강하다 디컴파일하는 언어)도 덜 가능성을 공모했다.
년 동안 유닉스 애플 리케이션의 소스 양식 (기계 판독이 아니라 인간 - 모든 의견과 공백 OOIIOIOI 등), 어떤 작가의 권리를 보호하는 것을 의미하고있다 꽤 적절한 형태로, 변수 이름을 모두 제거 가려져 배포되고있다. 매우 decompiler 출력도 마찬가지로 읽을 수있는 가능성의 소스 가려져있다.
업데이트 : Decompiler 기술은 아직 매우 어렵지만 상당한 진전이 있었으며 이후이 쓰여왔다.
읽기 decompiler 무엇이다? decompiler 프로젝트에 업데이트된 내용을 확인하십시오.
|
스크랩 거기를 C / C + +를 코드가 실행 프로그램을 변환하는 것이 a decompiler의 희망이 없나요?

