불행히도 내 소스 코드를 잃어 버렸고 리눅스에서 gcc로 만든 출력 파일이 있고 내 PC에 액세스 할 수 없습니다. 출력 파일을 소스 파일로 변환하는 방법이 있습니까 (linux 아래의 c)?
불행히도 내 소스 코드를 잃어 버렸고 리눅스에서 gcc로 만든 출력 파일이 있고 내 PC에 액세스 할 수 없습니다. 출력 파일을 소스 파일로 변환하는 방법이 있습니까 (linux 아래의 c)?
답변:
그래서 당신은 소를 가졌지 만 실수로 그것을 햄버거로 바 꾸었습니다.
죄송합니다. 그런 식으로 작동하지 않습니다.
백업에서 소스 파일을 복원하면됩니다.
아, 당신은 백업이 없었습니다. 불행히도, 우주는 당신에게 휴식을주지 않습니다.
바이너리 를 디 컴파일 할 수 있습니다 . 그것은 당신에게 당신의 소스 코드를 제공하지 않습니다,하지만 당신에게주지 일부 동일한 동작과 소스 코드를. 디버그 바이너리가 아닌 한 변수 이름을 얻을 수 없습니다. 최적화없이 컴파일하지 않으면 정확히 같은 논리를 얻을 수 없습니다. 분명히, 당신은 의견을 얻지 못할 것입니다.
Boomerang 을 사용 하여 일부 프로그램을 디 컴파일했으며 결과는 머신 코드보다 더 읽기 쉽습니다. 그것이 최고의 도구인지는 모르겠습니다. 어쨌든 기적을 기대하지 마십시오.
실행 파일을 리버스 엔지니어링 할 때 일반적으로 몇 가지 도구가 있습니다.
필자가 본 대부분의 경우 코드를 처음부터 다시 작성하거나 어셈블리 언어 프로그램으로 유지 관리하거나 변경 요청을 이전 버전에 다시 적용하여 재구성해야했습니다.
당신이하고 싶은 것은 "디 컴파일"입니다. 많은 디 컴파일러가 있으며 여기에 모두 포함시키는 것은 실용적이지 않습니다.
그러나 일반적인 설명으로 C 소스에서 실행 가능한 머신 코드로의 변환은 손실됩니다. 예를 들어 :
코드가 작성된대로 컴파일되는 경우는 드 rare니다. 요즘 대부분의 컴파일러는 코드를 극적으로 변경하여 최적화합니다. 당신이 컴파일 때, 컴파일러는 그것이 무엇인지 알 수있는 방법이 없습니다, 같은 소스 코드를 보았다해야하는지 추측 할 수 당신 이 사라 있기 때문에, 코드가되었다. 디 컴파일러가 양호하면, 얻은 코드는 최소한 동등한 실행 파일로 다시 컴파일 할 수 있으며 천천히 읽을 수 있도록 리팩토링을 시작할 수 있습니다. 그러나 디 컴파일러는 절대로 읽을 수없는 스파게티 코드를 생성 할 가능성이 높으며,이를 해독하는 데 큰 어려움이 있습니다. 때로는 프로그램을 처음부터 다시 작성하는 작업 이 줄어들 수도 있습니다 .