Ранее я задавал вопрос здесь, но я был незарегистрирован и не смог отредактировать свою запись (не уверен, что сможешь) или добавить какую-либо информацию о проблеме. В этот раз я постараюсь быть более внимательным, чтобы, я надеюсь, получить ответ ...
Я пытаюсь найти статический указатель и список смещений, чтобы можно было легко находить информацию в игре при каждом ее перезапуске. Я был успешен с каждой частью информации, кроме одной ...
В настоящее время я использую CheatEngine, чтобы помочь мне отладить и найти необходимые пути указателей.
Адрес значения, которое я хочу (который меняется с каждым началом игры) в настоящее время: 849576A Для справки, это первый слот инвентаря моего первого персонажа. Я знаю, что каждый слот смещен на 20 часов, а каждый символ - на 550 часов. Итак, первый слот инвентаря персонажа два - 849576A + 550h. Опять же, эти адреса меняют каждый перезапуск, но смещения не делают.
Используя CE, я могу видеть, какой доступ к этому адресу ... он возвращает следующие коды операций:
Эти два возвращаются, прежде чем делать что-либо в игре:
004b7ef9 - 0f bf 08 - movsx ecx,word ptr [eax]
004b542b - 0f bf 04 0a - movsx eax,word ptr [edx+ecx]
Затем, перемещая предметы в инвентаре, я получаю:
74be5008 - 72 2a - jb memcpy+84
004bfc3a - 0f bf 4c 02 60 - movsx ecx,word ptr [edx+eax+60]
004bf43f - 8d 7d 9c - lea edi,[ebp-64]
Я не уверен, какой из них использовать, поэтому я просто выбираю один и устанавливаю точку останова для одного из них, я выбрал 004b542b, вот полный раздел кода:
004B53F0 | 55 | PUSH EBP |
004B53F1 | 8BEC | MOV EBP, ESP |
004B53F3 | 83EC 0C | SUB ESP, C |
004B53F6 | 894D F4 | MOV DWORD PTR [EBP-C], ECX |
004B53F9 | C745 FC 00000000 | MOV DWORD PTR [EBP-4], 0 |
004B5400 | 837D 08 00 | CMP DWORD PTR [EBP+8], 0 |
004B5404 | 7F 04 | JG 004B540A |
004B5406 | 33C0 | XOR EAX, EAX |
004B5408 | EB 43 | JMP 004B544D |
004B540A | C745 F8 0F000000 | MOV DWORD PTR [EBP-8], F |
004B5411 | EB 09 | JMP 004B541C |
004B5413 | 8B45 F8 | MOV EAX, DWORD PTR [EBP-8] |
004B5416 | 83C0 01 | ADD EAX, 1 |
004B5419 | 8945 F8 | MOV DWORD PTR [EBP-8], EAX |
004B541C | 837D F8 19 | CMP DWORD PTR [EBP-8], 19 |
004B5420 | 7D 28 | JGE 004B544A |
004B5422 | 8B4D F8 | MOV ECX, DWORD PTR [EBP-8] |
004B5425 | C1E1 05 | SHL ECX, 5 |
004B5428 | 8B55 F4 | MOV EDX, DWORD PTR [EBP-C] |
004B542B | 0FBF040A | MOVSX EAX, WORD PTR [EDX+ECX] |
004B542F | 3B45 08 | CMP EAX, DWORD PTR [EBP+8] |
004B5432 | 75 14 | JNZ 004B5448 |
004B5434 | 8B4D F8 | MOV ECX, DWORD PTR [EBP-8] |
004B5437 | C1E1 05 | SHL ECX, 5 |
004B543A | 8B55 F4 | MOV EDX, DWORD PTR [EBP-C] |
004B543D | 0FBF440A 02 | MOVSX EAX, WORD PTR [EDX+ECX+2] |
004B5442 | 0345 FC | ADD EAX, DWORD PTR [EBP-4] |
004B5445 | 8945 FC | MOV DWORD PTR [EBP-4], EAX |
004B5448 | EB C9 | JMP 004B5413 |
004B544A | 8B45 FC | MOV EAX, DWORD PTR [EBP-4] |
004B544D | 8BE5 | MOV ESP, EBP |
004B544F | 5D | POP EBP |
004B5450 | C2 0400 | RETN 4 |
Я решил установить точку останова, чтобы я мог видеть значения регистра до и после строки, которая предположительно обращается к моему значению (004B542B | 0FBF040A | MOVSX EAX, WORD PTR [EDX + ECX]).
ДО:
EAX: 00000000
EBX: 00000000
ECX: 000001E0
EDX: 0849558C
ESI: 000000D0
EDI: 013A38A8
EBP: 00189CE0
ESP: 00189CD4
EIP: 004B542B
ПОСЛЕ:
EAX: 00000DAD
EBX: 00000000
ECX: 000001E0
EDX: 0849558C
ESI: 000000D0
EDI: 013A38A8
EBP: 00189CE0
ESP: 00189CD4
EIP: 004B542F
Для меня это означает, что EDX 0849558C должно быть значением, которое я ищу, а затем применить смещение 1E0. Тем не мение. При поиске в памяти шестнадцатеричных значений, соответствующих EDX, я не получаю результатов, что означает, что на этот адрес нет указателей.
Я использовал те же методы, которые я пытаюсь использовать здесь, чтобы успешно собрать каждый статический адрес, а затем применить смещения. Например, вот статический адрес + смещения, чтобы найти мое здоровье: 01263FC8 +284 + C +30 +90