바이너리 패치는 어떻게 생성합니까?
바이너리 파일에 대한 패치를 만드는 가장 좋은 방법은 무엇입니까? 사용자가 간단하게 신청할 수 있도록 하고 싶습니다(간단한 patch
신청이 좋을 것입니다). 파일에서 diff를 실행하면Binary files [...] differ
체크 아웃 bsdiff
과 bspatch
( 웹 사이트 , 맨 페이지 , 종이 , GitHub의 포크 ).
이 도구를 설치하려면:
- Windows: 이 패키지를 다운로드하고 압축을 풉니다 . 또한
bzip2.exe
in 의 사본이 필요합니다PATH
. 여기 "바이너리" 링크에서 다운로드 하세요 . - macOS: Homebrew를 설치하고 이를 사용하여
bsdiff
. - Linux: 패키지 관리자를 사용하여
bsdiff
.
Google Chrome 팀의 Courgette 는 바이너리 패치 실행 파일을 위한 가장 효율적인 도구로 보입니다.
그들의 데이터를 인용하려면:
개발자 채널의 최근 190.1 -> 190.4 업데이트 크기는 다음과 같습니다.
- 전체 업데이트: 10,385,920바이트
- bsdiff 업데이트: 704,512바이트
- Courgette 업데이트: 78,848바이트
다음은 빌드 지침 입니다. 다음은 Mehrdad 에서 제공한 2018년 Windows 바이너리 입니다 .
xdelta( website , GitHub )는 또 다른 옵션입니다. 더 최근인 것 같지만 그렇지 않으면 bsdiff와 같은 다른 도구와 어떻게 비교되는지 모르겠습니다.
용법:
- 패치 만들기:
xdelta -e -s old_file new_file delta_file
- 패치 적용:
xdelta -d -s old_file delta_file decoded_new_file
설치:
- Windows: 공식 바이너리를 다운로드합니다 .
- 초콜릿:
choco install xdelta3
- 자작:
brew install xdelta
- Linux: 패키지 관리자
xdelta
또는xdelta3
패키지 관리자에서 사용할 수 있습니다.
최신 포트: bsdiff/bspatch용으로 매우 유용한 .NET 포트:
https://github.com/LogosBible/bsdiff.net
내 개인적인 선택. 나는 그것을 테스트했고 모든 링크 중 유일한 링크였으며 즉시 컴파일 할 수있었습니다 (Visual Studio, 예 : 2013). (다른 곳의 C++ 소스는 약간 구식이며 최소한 약간의 연마가 필요하며 실제 메모리(diff 소스 크기) 제한을 설정하는 32비트에 불과합니다. 이것은 이 C++ 코드 bsdiff의 포트이며 패치 결과가 동일한지 테스트합니다. 원래 코드로).
추가 아이디어: .NET 4.5를 사용하면 여기서 종속성인 #Zip lib를 제거할 수도 있습니다.
C++ 코드보다 약간 느린지 측정하지 않았지만 저에게 잘 작동했습니다(bsdiff: 1-2분에 90MB 파일). 그리고 저에게 시간이 중요한 것은 bspatch일 뿐이지 bsdiff는 아닙니다. .
x64 시스템의 전체 메모리가 사용되는지 확실하지 않지만 가정합니다. x64 가능 빌드("모든 CPU")는 최소한 작동합니다. 100MB 파일로 시도했습니다.
- 게다가: 주요 대상이 실행 파일인 경우 인용된 Google 프로젝트 'Courgette'가 최선의 선택일 수 있습니다. 그러나 (적어도 Windows 측정의 경우) 빌드하는 작업이며 이진 파일의 경우 문서를 이해하는 한 순수한 bsdiff/bspatch도 사용하고 있습니다.
작고 간단한 패치의 경우 -a(또는 --text) 옵션을 사용하여 파일을 텍스트로 처리하도록 diff에 지시하는 것이 가장 쉽습니다. 내가 이해하는 한 더 복잡한 바이너리 diff는 패치 크기를 줄이는 데만 유용합니다.
$ man diff | grep -B1 "as text"
-a, --text
treat all files as text
$ diff old new
Binary files old and new differ
$ diff -a old new > old.patch
$ patch < old.patch old
patching file old
$ diff old new
$
파일 크기가 같고 패치가 몇 바이트만 수정하면 OS와 함께 일반적으로 설치되는 xxd를 사용할 수 있습니다. 다음은 각 파일을 줄당 1바이트의 16진수 표현으로 변환한 다음 파일을 비교하여 압축 패치를 만든 다음 패치를 적용합니다.
$ xxd -c1 old > old.hex
$ xxd -c1 new > new.hex
$ diff old.hex new.hex | grep "^+" | grep -v "^++" | sed "s/^+//" > old.hexpatch
$ xxd -c1 -r old.hexpatch old
$ diff old new
$
파일 구조를 알고 있다고 가정하면 ac/c++ 프로그램을 사용하여 바이트 단위로 수정할 수 있습니다.
http://msdn.microsoft.com/en-us/library/c565h7xx(VS.71).aspx
이전 파일을 읽고 원하는 대로 수정된 새 파일을 작성하면 됩니다.
Don't forget to include a file format version number in the file so you know how to read any given version of the file format.
ReferenceURL : https://stackoverflow.com/questions/1945075/how-do-i-create-binary-patches
'IT이야기' 카테고리의 다른 글
SQL Server의 다른 저장 프로시저에서 호출된 저장 프로시저의 SELECT 출력을 억제하는 방법 (0) | 2021.10.01 |
---|---|
XHTML 역할 속성이란 (0) | 2021.10.01 |
BCL 컬렉션이 클래스가 아닌 구조체 열거자를 사용하는 이유 (0) | 2021.10.01 |
ggplot2를 사용하여 R의 geom_bar 위에 레이블을 넣는 방법 (0) | 2021.10.01 |
Visual Studio가 시작 시 멈춤 또는 중단됨 (0) | 2021.10.01 |