문제

프로그램에서 사용하려는 파일에서 비트를 변경하는 명령 줄 실행 파일이 있습니다. 이 도구를 사용하고 하나의 실행 파일 만 배포하는 내 자신의 실행 파일을 만들 수 있습니까?

편집] 설명 :

명령 줄 도구는 오프셋을 취하고 일부 비트를 사용하고 주어진 파일 에서이 오프셋에서 비트를 변경합니다. 따라서 특정 비트를 특정 값으로 변경하는 애플리케이션 용 패치를 만들고 싶습니다. 따라서 수행 할 수있는 일을 배치 파일과 같은 글을 작성하지만이를 수행하는 실행 파일을 작성하고 싶습니다. 특정 값으로 호출하는 래퍼 프로그램.

(wind

도움이 되었습니까?

해결책

래퍼를 작성하는 것 보다이 프로그램을 구현하는 것이 더 쉬울 것입니다. 그것은 사소한 것처럼 들립니다. 파일을 열고, 올바른 위치를 찾고, 비트를 작성하고, 파일을 닫으면, 완료되었습니다.

다른 팁

가장 쉬운 방법은이 exe를 자신의 exe에 포함시키고 그것을 실행하기 위해 디스크에 쓰는 것입니다.

실행 파일을 실행 파일에서 이진 스트림 자원으로 추가 할 수 있으며 필요할 때 임시 폴더에서 추출하고 임시 파일로 새 프로세스를 만들 수 있습니다.

이를 수행 해야하는 정확한 코드는 .NET 또는 C ++ 코드를 작성하는지 여부에 따라 다릅니다.

짧은 대답 : 아니요.

덜 짧은 답변 : 설치자 또는 자체 추출 아카이브 실행이 아닌 한 아닙니다.

더 길고 투기적인 답변 : 파일 시스템이 대체 데이터 스트림을 지원하는 경우 프로그램에 유틸리티가 포함 된 스트림을 추가 할 수 있으면 프로그램이 자체 대체 데이터 스트림에 액세스하여 필요할 때 유틸리티를 추출 할 수 있습니다. 아하.

하나의 실행 파일을 다른 실행 파일의 끝에 추가하고 임시 폴더에 포장을 풀기 위해 코드를 작성할 수 있습니다.

이전에 비슷한 작업을 수행했지만 구성 파일과 일부 비트 맵이 Windows의 EXE에 추가되었습니다. 내가 한 방식은 먼저 내 물건을 EXE의 끝에 추가 한 다음 작은 구조물을 작성하여 데이터의 파일 오프셋을 포함하는 작은 구조물을 작성하는 것이 었습니다.

앱을 실행할 때는 파일의 끝을 뺀 구조물의 크기를 꺼내고 파일 오프셋을 추출하고 두 번째 exe를 임시 폴더로 복사 한 다음 시작하십시오.

좋아, 여기에 요청 D에 대한 자세한 내용이 있습니다. 이것은 결합 된 exe를 만들기위한 의사 코드입니다. 이것은 메인 엑스를 컴파일 한 후 실행하는 작은 유틸리티입니다.

Open destination file
Open main exe as a binary file
Copy main exe to destination file
offset = size of main exe
Open 2nd exe as a binary file
Copy 2nd exe to the output file
Write the offset to the output file

이제 추출 절차를 위해. 이것은 당신의 주요 exe에 있습니다 :

Find the location of our own EXE file (GetModuleFileName() under Windows)
Open the file in binary mode
Seek to the end minus sizeof(offset) (typically 4 bytes)
Read the offset value
Seek to the offset position
Open a temporary file in binary mode
Read bytes from the main EXE and write to the temporary file
Launch the temporary file

귀하의 목적을 위해이 작업을 수행하는 가장 쉬운 방법은 아마도 자체 추출 실행 패키지를 사용하는 것입니다. 예를 들어, 같은 도구를 사용하십시오 Paquet Builder EXE (및 원하는 다른 파일)를 패키지하고 EXE 또는 배치 파일을 호출하거나 사용자가 자체 추출 실행 가능을 풀 때 원하는 다른 것을 호출하도록 구성 할 수 있습니다.

EXE가 이전 가능하도록 만들어진 경우 (EssentialL Linker Flag /Fix : No) 실제로로드 리브러리를 수행하고 기본 주소를 가져 와서 호출 체인을 설정하고 전화 (점프)를 호출 할 수 있습니다. 그것은 노력의 가치가 없을 것이며, 이런 식으로 구축 된 Exe 's는 거의 없어서 그것을 재건하기위한 코드를 가져야 할 것입니다.

그래서 안돼.

C/C ++/ASM으로 글을 쓰지 않고 '.NET이 아님' - Fopen/Fseek/Fwrite에 의해 스티임이있는 개발자에게 더 흥미가 있습니다. 행위.

나는 이것이 또한 사용함으로써 가능하다고 생각합니다 Autoit의 FileInstall 기능. 이를 위해 자동 설정을 설정하고 FileInstall 함수가 포함 된 스크립트를 작성하여 WHO EXE를 포함한 다음 FI를 사용하십시오. 기능 runwait 그들을 실행합니다. exe에 컴파일하면 완료해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top