주소값이 변경되었을 때, 기존의 Assembly 코드에서 수정해야 할 부분은 주로 메모리 주소와 관련된 부분입니다. 이 코드에서 주소를 참조하는 주요 부분은 mov, cmp 등의 명령어에서 사용되는 메모리 주소입니다. 주로 바뀐 주소를 업데이트해야 할 곳은 mov, cmp, call, jmp 등에서 사용하는 값입니다.
1. 주소값 업데이트 위치
코드 내에서 주소값을 직접 사용하고 있는 부분은 크게 다음과 같습니다:
- mov 명령어로 메모리 값을 로드할 때 사용되는 주소값
- cmp 명령어로 값을 비교할 때 사용되는 주소값
- call 명령어로 특정 함수나 코드로 점프할 때 사용되는 주소값
- jmp 명령어로 코드 실행 흐름을 바꾸는 주소값
2. 수정해야 할 부분
1. 0040FB1C 주소에서의 JMP 명령어
0040FB1C: JMP MovePoint
- 이 부분은 0040FB1C에서 MovePoint로 점프하는 명령어입니다.
- 만약 0040FB1C의 주소가 변경되었다면, 0040FB1C를 새로운 주소로 수정해야 합니다.
2. NPCMSGFIT 값 읽기
mov ebx,[NPCMSGFIT] cmp ebx,01 JE TerAMM
- NPCMSGFIT 주소를 읽는 부분에서 NPCMSGFIT의 주소가 변경되었다면, NPCMSGFIT 주소를 새 주소로 바꿔야 합니다.
- 예를 들어, NPCMSGFIT의 주소가 0x12345678로 변경되었다면, 이 코드를:
-
asm복사mov ebx,[0x12345678]
와 같이 변경해야 합니다.
3. 0058DAD4 주소에서 값 읽기
mov eax,[0058DAD4] mov eax,[eax+C] cmp eax,02 JE TerAMM
- 0058DAD4 주소가 변경되었으면, 0058DAD4를 새로운 주소로 업데이트해야 합니다.
- 예를 들어, 새 주소가 0x87654321로 변경되었으면:
-
asm복사mov eax,[0x87654321] mov eax,[eax+C]
4. SetPoint 주소와 관련된 부분
lea eax,[Point] mov [SetPoint],eax
- SetPoint에 저장하는 값은 Point의 주소입니다. Point가 할당된 메모리 위치가 변경되었으면, lea eax,[Point] 부분을 새로운 주소로 수정해야 합니다.
- 예를 들어, Point가 새롭게 0x12345678에 할당되었으면, 이 부분은:
-
asm복사lea eax,[0x12345678]
5. call 명령어에서의 함수 주소
call 004CA9A1
- 004CA9A1 주소가 변경되었다면, 새로운 함수 주소로 업데이트해야 합니다. 예를 들어, 함수 주소가 0x87654321로 변경되었다면:
-
asm복사call 0x87654321
6. 다른 cmp나 mov에서의 주소값
mov ebx,[eax+10] mov ecx,[eax+14]
- eax+10, eax+14는 상대적인 오프셋을 사용한 주소 참조입니다. 이 부분은 오프셋이 변경되지 않으면 그대로 두어도 됩니다. 그러나 오프셋이 변경되었거나, eax가 가리키는 주소가 변경되었으면, 그에 맞게 수정해야 합니다.
3. 수정 방법
예시: 0058DAD4의 주소가 0x87654321로 변경되었다면:
- 원본 코드:
-
mov eax,[0058DAD4] mov eax,[eax+C]
- 수정된 코드:
-
mov eax,[0x87654321] mov eax,[eax+C]
4. 메모리 주소 확인 방법
- 디버거 사용: 게임 또는 프로그램을 디버깅할 수 있는 툴(예: Cheat Engine, x64dbg)을 사용하여 메모리 주소를 실시간으로 확인할 수 있습니다.
- 예를 들어, NPCMSGFIT이나 0058DAD4와 같은 주소가 변경되었으면, 디버거에서 해당 값을 추적하여 새로운 주소를 파악한 후 코드를 수정합니다.
- 메모리 덤프: 프로그램의 메모리 덤프를 생성하여 주소값을 수동으로 확인하고 수정할 수도 있습니다.
- 패치된 버전의 주소 확인: 프로그램 업데이트 후, 변경된 주소값을 추적하려면 업데이트된 프로그램의 패치를 확인하거나, 이전 버전과 새 버전 간의 주소 차이를 비교할 수 있습니다.
5. 주의할 점
- 정확한 주소 추적: 코드에서 사용되는 모든 메모리 주소를 정확히 추적해야 합니다. 작은 실수라도 예상치 못한 동작을 초래할 수 있습니다.
- 기계적 수정: 주소값을 수동으로 수정하는 대신, 프로그램을 자동화하는 툴이나 패치 도구를 사용할 수 있으면 더욱 효율적입니다.
결론
업데이트로 주소값이 변경되었을 때, Assembly 코드 내에서 해당 주소가 사용된 부분을 찾아 새로운 주소로 수정하는 것이 필요합니다. 주로 mov, cmp, call, jmp와 같은 명령어에서 참조하는 주소를 바꾸면 됩니다. 변경된 주소를 확인한 후 해당 주소를 코드에 반영해 주면 됩니다.
최근댓글