2010-12-06 8 views
1

입력 클래스를 암호화하고 전송 및 해독해야하는 어셈블러 프로젝트를 완료하려면 클래스 중 하나에서 C 및 ASM {}을 사용하고 있습니다.어셈블러에서 배열 멤버에 액세스

키는 빈 C char 배열 (길이가 20 자)로로드 된 다음 나중에 XOR 문을 사용하여 암호화됩니다. ESI으로 '키'의 어드레스를두고

레아 ESI :

코드

어레이의 어드레스가로드. 디버그 모드에서 레지스터를 검사 할 때 여기의 주소는 키 배열의 주소와 동일하므로 작동하는 것으로 알고 있습니다.

mov 인 EDX는 [ESI]

우리는 우리가 "MOV는 [ESI], EAX"는 a의 값을 넣어 사용할 때이, EDX에 ESI의 첫 번째 인덱스의 값을 이동 것이라고 생각 esi 배열에 등록하십시오. 그 반대는 논리적으로 보였다.

그러나 edx가 실제로 얻는 값은 "875575655"(마지막 실행) 또는 이와 유사합니다. char 값에 비해 너무 큽니다.

우리가 배열에 잘못 액세스 한 것 같은 느낌이 들었습니다. 조언을 제공해 주시면 감사하겠습니다.

참고 : 일반적으로 단순히 배열 색인을 늘리려면 incis를 사용하고 위와 같이 읽습니다. 배열에서 읽기를 계획하는 방법입니다.

답변

2

mov edx, [esi]의 경우 edx 크기가 더블 워드이기 때문에 DWORD를 읽습니다. 바이트를 읽으려면 mov dl, [esi]을 사용하십시오.

2

875575655의 hexa는 0x34303967입니다. 'g904'문자열입니다.

설명 : 논리적으로는 문자열이지만 한 번에 더 많은 문자를로드 할 수 있습니다. 따라서 20 바이트로드 및 xors를 만드는 대신 DWORD에서 5 번의 작업을 수행 할 수 있습니다.

관련 문제