2013-03-14 4 views
0

내가하려는 것은 게임과 게임을 업데이트하는 실행기를 만드는 것입니다.exe ​​파일을 덮어 쓰지 않고 게임 업데이트

이 런처는 게임의 .exe 파일을 덮어 쓰지 않고 게임을 업데이트합니다.

이게 가능 ... 나는이 DLL을 사용하여 가능하다고 생각하지만 난 곳을 배울 몰라?

+0

가능하지만이 사이트에서 귀하의 질문에 답변하기에는 너무 일반적입니다. – FLClover

+1

런처를'Game.exe'에서 실행하면 독립 실행 형 응용 프로그램으로 실행해야합니다. 왜냐하면 .DLL이 이미 사용 중이기 때문입니다. – LukeHennerley

답변

0

dll 프로젝트를 만드는 방법을 배우는 데 사용할 수있는 여러 가지 소스가 있습니다. 은 Microsoft 튜토리얼

시작 - 은 http://msdn.microsoft.com/en-us/library/ms235636(v=vs.100).aspx

은 처음부터 게임의 디자인에 대해 신중하게 생각하십시오. 더 쉽게 관리하고 쉽게 업데이트 할 수있게하려면 게임을 핵심 부분, 즉 물리학, 렌더링 등으로 분할하고 dll로 만들 수 있습니다.

나중에 렌더러를 업그레이드하면 dll을 교체하거나 클라이언트 컴퓨터의 렌더러 dll을 덮어 쓰는 실행기 만 있으면됩니다.

dll을 사용하는 데있어서 몇 가지 단점은 게임을 더 많은 파일로 출하해야한다는 것이고 최종 사용자가 자신의 modding 용도로 dll을 감싸는 것이 더 쉽다는 것입니다.).

1

실행 파일 (게임이나 다른 프로그램)을 수정하지 않고 실행중인 프로세스의 메모리를 수정하려는 경우 나에게 들립니다.

kernel32.dll 라이브러리에 속하는 ReadProcessMemory 및 WriteProcessMemory API 호출을 사용하여 실행중인 프로세스의 메모리를 읽고 쓸 수 있습니다. OpenProcess를 사용하여 메모리를 읽고 쓸 수 있기 전에 프로세스에 대한 유효한 핸들을 만들어야합니다.

사용하는 언어에 따라 액세스가 매우 간단합니다. C#에서 다음과 같은 구문을 사용하여 DLL을 가져 오기를 선언해야합니다

[DllImport("kernel32.dll")] 
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId); 

[DllImport("kernel32.dll")] 
public static extern bool ReadProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesRead); 

[DllImport("kernel32.dll")] 
public static extern bool WriteProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesWritten); 

그런 다음 OpenProcess에를 사용하여 프로세스에 대한 핸들을 구 읽고 ReadProcessMemory를 사용하여 메모리에 기록하고 적절하게 WriteProcessMemory의.

편집 할 메모리 위치를 찾는 데 도움이되도록 OLLYDBG와 같은 디버깅 도구를 사용할 수 있습니다. 또 다른 훌륭한 도구는 ArtMoney입니다. ArtMoney를 사용하면 실행중인 프로세스에서 값을 모니터링하고 추적하여 돈, 건강 등과 같은 게임 정보를 저장하는 위치를 식별 할 수 있습니다.

추가 지원이 필요한 경우 정확하게 수행하는 작업에 대한 추가 정보를 추가하는 것이 유용 할 수 있습니다.

관련 문제