죄송합니다. ASM 및 IDA에 관해서는 완전한 멍청한 반응입니다. 저의 프로그래밍 경험은 주로 Java 개발자로서 다소 편안함을 느낍니다.마지막으로 레지스터에서 장소를 변경 한 '함수'를 찾고 계십니까?
나는 리버스 엔지니어링을 약간하고 있으며, 내가 원하는 것을 거의 찾을 수 있었다. 내 프로그램은 다음 조건을 발견
mov ecx, [esi+500h]
cmp byte ptr [ecx+679h], 1
jnz loc_7256AAD
최대한 멀리 이해, 그것은 [EXC + 679h는 상기와 어드레스의 바이트를 비교 afterwhich 레지스터 ECX로 [ESI + 500H]의 값을 이동
바이트 1입니다. 결과가 0이 아니면 loc_7256AAD 함수로 점프합니다.
내 문제는 [ecx + 679h]의 바이트가 사실 부울이며, 항상 0 또는 1입니다. 결과는 0인지 여부를 결정하는 함수를 찾는 방법에 대한 단서가 없습니다. 또는 1. 기본적으로 나는 [ecx + 679h]의 가치가 설정된 장소를 찾는 방법에 대한 조언을 주시면 감사하겠습니다. 감사.
이 스 니펫을 호출하는 루틴에서 코드를 제공합니다.
push ecx
lea eax, [esp+70h+arg_8]
mov ecx, esp
mov dword ptr [esp+70h+var_30], esp
push eax
call ds:mfc90u_280
mov byte ptr [esp+70h+var_4], 9
mov byte ptr [esp+70h+var_4], 1
mov ecx, [esi+500h]
call sub_7210050
mov ebp, eax
test ebp, ebp
jz loc_7256E73
및 loc_7256e73이 첫 번째 스 니펫입니다.
미안하지만 나는 어떤 조언을 주셔서 감사합니다.
Jens의 조언을 듣고 쓰기 추적 브레이크 포인트를 추가하려고 시도했지만 메모리 위치가 변경됩니다. 즉, ecx + 679h 주소는 매번 다릅니다. 누구든지 더 이상 아이디어가 있다면 크게 감사드립니다.
'결과가 0이 아닌 경우 ': [JNE and JNZ] (http://www.felixcloutier.com/x86/Jcc.html)는 동일한 opcode와 동의어입니다. 이 경우 올바른 의미 해석이 아닌 것으로 간주됩니다. ('byte ptr [ecx + 679h]'-'1 '이 0이면 ZF가 설정됩니다. 왜냐하면 cmp는 플래그를 설정하는 하위와 같기 때문입니다). –