2011-11-17 3 views
2

저는 어셈블리에 익숙하지 않지만 프로그래밍에 익숙하지 않으며 일반적으로 어떻게 작동하는지 알려드립니다. 꽤 많은 언어를 이미 알고 있기 때문에 첫 번째 ASM 프로그램에서 입력 파일의 SHA-1 해시를 계산하기로 결정했습니다. 나는 이미 분리 된 많은 부분을 처리했지만 두 부분으로 문제가있다. 하나는 여기에 도움을 요청할 것입니다.ASM에 64 비트 Big-Endian int를 어떻게 추가합니까?

기본적으로 Big 및 Little 엔디안 번호의 개념과 ASM에서이를 나타내는 방법에 대해 혼란 스럽습니다. SHA-1 Psuedocode에서 인용하자면 :

[63 0's]1 

또는

1[63 0's] 

또는 :

append length of message (before pre-processing), in bits, 
as 64-bit big-endian integer 

마음에 와서 유일한 물건은, 예를 들어 같은 숫자 1을 표현하는 것입니다

[31 0's] 1 [32 0's] 

기본적으로 내 생각은 지금까지 기본적으로 S :

mov eax, message ;Move message to be hashed into eax 
shl eax, 64  ;Shift message over enough bits to store 64-bits 
or  eax, msglen ;Adds message length to the very end of message 

이 모든 따라서 왼쪽으로 64 비트 이동 32 비트 레지스터가 큰 오버 플로우를 만들 것이다 사용하지만 그게 내가 운동 아직 또 다른 문제로 이것은, 가장 가능성이 잘못된 것입니다.

나는 트랙에서 벗어 났다고 생각하지만 근본적으로 내 질문은 위의 코드가 빅 엔디안 정수를 추가하는 올바른 방법일까요? 또는 나는 그것을 거꾸로 갖게 되었는가, 아니면 모든 것을 완전히 벗어 났는가 등등. 이것이 합리적인지, 너무 피곤할 지 확신 할 수 없다.

+0

처음이다. 많은 프로세서에서 특별한 작업을 수행하지 않아도됩니다. – AShelly

+2

알고 계신 언어로 구현 했습니까? 거기서 시작해서 간단한 단계로 작성한 다음 asm으로 변환하십시오. –

+0

그건 내가 훑어 본 꽤 기본적인 것입니다. 나는 이것을 C에서 꽤 쉽게 할 수 있다는 것을 알기 때문에 내일부터 시작하겠습니다. 팁 고마워. – ozdrgnaDiies

답변

1

A-빅 엔디안 64 비트 정수로 숫자 1의 이진 표현은 어떤 프로세서를 지정해야

<- Start of message         End of message -> 

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 

^ big (most significant) end 
+0

이것은 정확하게 내가 찾고 있었던 것 같습니다. 너무 쉬워 보이지만, 분명히 이렇게 말한 곳은 어디에도 없습니다. 고맙습니다. – ozdrgnaDiies

관련 문제