2013-06-10 7 views
0

을 이해하려고 노력하고 나는이 라인을 이해하려고 노력 해요 :내가 어셈블리 초보자 해요 어셈블리 코드를

mov $0x80484e0,%ebx // what the hell means this value: 0x80484e0? 
mov $0x1b,%eax // writing 27 in %eax 
mov %edx,%edi // ? %edx is not used until not, why reading from there? 
mov %ebx,%esi // why not like this: mov $0x80484e0,%esi 
mov %eax,%ecx // writing 27 in counter-register, but same questen like one line before 
rep movsl %ds:(%esi),%es:(%edi) // repeat 27 times: copy 32 bit word from %ds:(%esi) to %es:(%edi) 

을하지만, % DS의 의미는 무엇인가 : (%의 ESI)는 % ES :(% edi)? 나는이 라인이 아무 것도 복사해야한다는 것을 알고 있습니다. 그러나 가장 중요한 질문은 값 0x80484e0의 의미입니다.

+0

'mov reg, reg'는'mov reg, imm'보다 훨씬 짧습니다. –

답변

1

$0x80484e0은 숫자의 16 진수 표현 인 리터럴 값 0x80484e0을 의미합니다. 그것은 아마도 뭔가의 주소 일 것입니다. 더 많은 코드가 없으면 그 의미로 당신을 도울 수 없습니다.

두 번째 질문은 왜 esi로 직접 이동하지 않는지 묻습니다. 몇 가지 가능성이 있습니다 : 하나는 코드가 나중에 ebx에서 값을 사용하므로 복사본을 만드는 것이 낫습니다. movsl 명령은 esi 및 edi를 변경합니다.

+0

이 주소의 값을 얻을 수 있습니까? 어쩌면 gdp로? disas 0x80484e0 시도했지만 결과가 없습니다 ... –

+0

주소 * 값은 * 0x80484e0입니다. 그것은 지침이 될 수 있지만 그것을 조작하는 지침을 고려한 데이터 일 가능성이 큽니다. – wallyk