2014-11-27 4 views
1

일부 어셈블리 코드를 통해 무엇을하고 있는지 (그 이유는 악의가 없으므로) 무엇인지 알아 내려고합니다. 난 당신이 너무 세 값을 비교할 수 없습니다 알다시피, Google에서 나이를 지출하고이 일을 질수 그림, 0DADADADA3 개의 인수가있는 어셈블리 cmp 명령

CMP d를, [EAX] : 한 줄에 다음과 같은 명령이 나는 0DA .... 부분이 내가 무엇을 놓쳤는 지 안다. 나는 이것이 빈 메모리를 채우는 것과 관련이 있지만 확실하지 않다는 것을 다시금 알 수없는 기사를 발견했다. 어떤 도움을 주시면 감사하겠습니다.

+0

이것은 꽤 의심 스럽습니다. 'cmp'는 정확하게 2 개의 입력 피연산자를 가지며, 암시 적으로 상태 플래그만을 출력으로 설정합니다. 게다가, '0DADADADA'도 나쁘게 보입니다. 선행 0은 8 진수로 식별해야하고 숫자는 분명히 16 진수입니다. – EOF

+0

선행 0은이를 숫자로 식별합니다. 그것이 8 진수인지 여부는 어셈블러의 정의 문제이며, 이것은 분명히 16 진수입니다. –

+0

@IraBaxter : 일반적으로 16 진수 리터럴은 접두사가 '0x ...'인 반면, 8 진수는 선두가 0입니다. 이 질문은 다른 규칙을 사용하는 어셈블러와 관련 될 수 있지만 정확한 어셈블러는 언급되지 않았습니다. – EOF

답변

0

사용중인 어셈블러 구문을 지정해야합니다. x86 (아마도 이것은 가능할 것입니다.)과 다른 것들에도 꽤 많은 종류가 있습니다.

특정 구문을 알지 못하고 CMP 명령어에 3 개의 피연산자가 없다는 데 동의하면 "d"는 "dword [32 비트]"를 의미한다고 생각합니다. 그래서 가능성있는 해석은

"compare dword operand indirect through eax to hex literal 0DADADADA" 

입니다. 유효한 x86 명령어입니다.

+2

아마도 어딘가에 'd'를 'DWORD'로 정의하는 매크로가있을 것입니다. –

+0

나는 그 무엇이든지 대답 할 수 없다는 것을 알지 못하기 때문에 두려워합니다. 우리는 방금 코드 스 니펫 (10 줄)을 제공 받았고 그 부분이 무엇을하는지 알아 내려고했습니다. 코드에서 'd'가 무엇인지 정의하는 것은 없습니다. – user118074

+2

제공자가 제공? 뭔가 명확하게 정의 된 부분을 이해하고 그러한 정의의 세부 사항을 배우는 것이 중요합니다. 그것의 뒤에 정의를 분명히하지 않고 누군가에게 당신에게 무언가를 건지는 것은 완전히 다른 것입니다. 내가 묻는 요원이 교수라고 생각 하나? 그는 실제 세계에서 당신에게 교훈을 가르치고 있습니다. (충분한 정보를 얻지 못하면 충분히 얻을 수있는 문제입니다.) 그는 매우 나쁜 교사입니다. 그렇지 않다면 그는 현실 세계에 오신 것을 환영합니다. 나는 그가 어떤 어셈블러 표기법을 비워야하는지 구체적으로 물어볼 것이다. –

관련 문제