바이너리 파일 용 패치를 만드는 가장 좋은 방법은 무엇입니까? 사용자가 간단하게 적용하기를 원합니다 (간단한 patch
응용 프로그램이 좋을 것입니다). 표준 patch
것보다 다른 것을 사용하는 당신을 위해 옵션 인 경우 파일에 DIFF를 실행 당신이 bsdiff
및 bspatch
을 확인 할 수 있습니다, Binary files [...] differ
바이너리 패치는 어떻게 만듭니 까?
답변
아주 오래된 소스입니다. 현대적인 Visual Studio와 함께 컴파일하는 것은 쉽지 않습니다. VS 2009에서는 효과가 있었지만 최신 버전에서는 오류가 발생했습니다. 또한 메모리 소비와 관련하여 실제 문제가되는 것은 32 비트뿐입니다 (다른 답변 참조). 확실하지 않다. x64 수정으로 컴파일하면이 .-. NET 포트로 전환했다. 다른 대답을 보라. – Philm
'bsdiff'와'courgette '는 실행 가능한 바이너리에 최적화되어 있습니다; [비공식 Windows 바이너리] (http://tpokorra.blogspot.cz/2007/11/bsdiff-for-windows-and-net.html)를 발견했지만 즉시 실패했습니다. –
당신이 AC/C를 사용할 수있는 파일의 구조를 알고 가정 ++ 프로그램은 바이트로 그것을 바이트를 수정 :
http://msdn.microsoft.com/en-us/library/c565h7xx(VS.71).aspx
그냥 이전 파일에 읽고, 원하는대로 수정 한 새로운 것을 작성하십시오.
특정 파일 형식의 버전을 읽는 방법을 알 수 있도록 파일 형식 버전 번호를 파일에 포함하는 것을 잊지 마십시오. 10 배 작은 패치 -
이 솔루션은 제정신이 아닙니다. 'sed'가 이미 할 수있는 모든 일을 C/C++을 사용하여합니다. 아니면, 강력한 성능의 휴대용 프로그래밍 언어를 사용하고 싶다면,'perl'이 최선의 선택입니다. 라우터 펌웨어를 작성한다면 당연히 C 또는 C++로 갈 것이지만 diffing ...? –
Google Courgette tool 이진은 diff 패치
comparing with bsdiff에 대한 가장 효율적인 도구처럼 보인다!
bsdiff 업데이트 704512
애호박 업데이트 78,848
이 문서는 "컴파일 된 실행 파일이 포함 된 대용량 파일"에 대해 더 많은 것을 알고있는 새로운 diff 알고리즘을 작성했습니다. 그 의미는 다른 바이너리 파일에서도 잘 작동하지 않을 수도 있습니다. – James
해당 링크를 가져 주셔서 감사합니다. 그러나 Windows에서 컴파일하는 것은 실제 이야기입니다. 먼저 전체 개발자 시스템을 설치합니다. Git, Python, 등등. 아마도 작동하지만 어쩌면 내 컴퓨터에서 가져 오기가 보안되고 실패한 일부 포트를 사용했다. 바이너리 다운로드 링크를 아는 사람이 있습니까? – Philm
@James Courgette는'bsdiff'의 진정한 후계자입니다. 문서에서 : Courgette'diff = bsdiff (concat (원래, 추측), 업데이트)'. 합리적인'bdiff' 알고리즘을 사용하면'len (bdiff (concat (original, guess), update))
현대 포트 : bsdiff/bspatch에 매우 유용 .NET 포트 :
https://github.com/LogosBible/bsdiff.net
내 개인적인 선택. 테스트 한 결과, 모든 링크 중 유일하게 해당 항목을 컴파일 할 수있었습니다 (예 : Visual Studio (예 : 2013)). (다른 곳의 C++ 소스는 약간 구형이며 최소한 비트 폴리싱이 필요하고 실제 메모리 (diff 소스 크기) 제한을 설정하는 32 비트입니다.이 C++ 코드 bsdiff의 포트이며 패치 결과가 동일한 지 여부도 테스트합니다 원래 코드로).
추가 아이디어 : .NET 4.5를 사용하면 #Zip 라이브러리도 제거 할 수 있습니다. 여기에는 종속성이 있습니다.
C++ 코드보다 약간 느린지를 측정하지는 못했지만 (bsdiff : 1 ~ 2 분에 90MB 파일) 시간이 중요한 날에 대해서는 bspatch 만 사용합니다. bsdiff가 아닙니다.
x64 시스템의 전체 메모리가 사용된다면 실제로는 잘 모르겠습니다. x64 가능 빌드 ("모든 CPU")는 최소한 작동합니다. 100MB 파일로 시도했습니다.
-이외 : 인용 된 Google 프로젝트 'Courgette'가 주요 타겟이 실행 파일 인 경우 최선의 선택 일 수 있습니다. 하지만 그것을 구축 (윈도우 측정, 적어도), 그리고 바이너리 파일에 대한 순수한 bsdiff/bspatch를 사용하여, 나는 의사를 이해했습니다.
xdelta은 다른 옵션입니다.
make patch:
xdelta3.exe -e -s old_file new_file delta_file
apply patch:
xdelta3.exe -d -s old_file delta_file decoded_new_file
그것은 사제를 통해 Mac에서 사용할 수는 : brew install xdelta
은 최근의 것으로 보이지만, 그렇지 않으면 나는 bsdiff 같은 다른 도구를 비교하는 방법 아무 생각이 없습니다.
Windows 바이너리 : [공식 xdelta3] (https://github.com/jmacd/xdelta-gpl/releases), [비공식 xdelta] (http://www.evanjones.ca/software/xdelta-win32.html). –
- 1. Perl 클래스는 어떻게 만듭니 까?
- 2. Catalyst에서 세션을 어떻게 만듭니 까?
- 3. 게임 바닥을 어떻게 만듭니 까?
- 4. 사전 항목은 어떻게 만듭니 까?
- 5. 이벤트 구독자는 어떻게 만듭니 까?
- 6. 컨테이너 파일은 어떻게 만듭니 까?
- 7. EDM에서 데이터베이스를 어떻게 만듭니 까?
- 8. 페이지 템플리트는 어떻게 만듭니 까?
- 9. 싱글턴 IEnumerable은 어떻게 만듭니 까?
- 10. 모바일 사이트는 어떻게 만듭니 까?
- 11. 포인터의 배열은 어떻게 만듭니 까?
- 12. JSON Array는 어떻게 만듭니 까?
- 13. 빈 op_array는 어떻게 만듭니 까?
- 14. gitosis에서 머리를 어떻게 만듭니 까?
- 15. RSS 피드는 어떻게 만듭니 까?
- 16. 동적 URL은 어떻게 만듭니 까?
- 17. 소셜 그래프는 어떻게 만듭니 까?
- 18. CruiseControl.Net에서 속성을 어떻게 만듭니 까?
- 19. 제한된 AppDomain은 어떻게 만듭니 까?
- 20. UISplitView를 수동으로 어떻게 만듭니 까?
- 21. 런타임에 객체를 어떻게 만듭니 까?
- 22. 맞춤식 날짜는 어떻게 만듭니 까?
- 23. String에서 org.xml.sax.InputSource를 어떻게 만듭니 까?
- 24. Android에서 계기는 어떻게 만듭니 까?
- 25. 브라우저 툴바없이 Flex에서 팝업을 어떻게 만듭니 까?
- 26. 확장 방법 (F #)은 어떻게 만듭니 까?
- 27. 기본 설정 창은 어떻게 만듭니 까?
- 28. 편집 가능한 UNION 쿼리는 어떻게 만듭니 까?
- 29. 런타임시 WPF 대화 상자를 어떻게 만듭니 까?
- 30. WPF에서 기본 페이지는 어떻게 만듭니 까?
관련 항목 : http://stackoverflow.com/questions/688504/binary-diff-tool – miku
참고 : 질문 http://stackoverflow.com/questions/688504/binary-diff-tool-for-very-large -files는 Windows 전용입니다. – Tino