현재 간단한 C 코드 단편을 분석하여 어셈블리 언어와 다른 컴파일러 옵션의 효과를 배우려고합니다. 지금은 다음과 같은 명령을 통해 stumpled :이 주소를 해석하는 법 -0x80 (% rbp, % rax, 4)
mov %edx,-0x80(%rbp,%rax,4)
는 내가 이해하지 못하는 것은 대상 주소 -0x80(%rbp,%rax,4)
에 대한 표현이다. 명령어는 루프의 로컬 배열에 값을 할당합니다.
현재 간단한 C 코드 단편을 분석하여 어셈블리 언어와 다른 컴파일러 옵션의 효과를 배우려고합니다. 지금은 다음과 같은 명령을 통해 stumpled :이 주소를 해석하는 법 -0x80 (% rbp, % rax, 4)
mov %edx,-0x80(%rbp,%rax,4)
는 내가 이해하지 못하는 것은 대상 주소 -0x80(%rbp,%rax,4)
에 대한 표현이다. 명령어는 루프의 로컬 배열에 값을 할당합니다.
기계 명령은 %edx
의 내용을 %rbp + 4 * %rax - 0x80
에 지정된 주소로 복사합니다. %rax
이 해당 배열의 인덱스를 보유하고 있으며 %rbp - 0x80
이 기본 주소 인 것으로 보입니다.
AT & T 구문을 더 잘 이해하려면 here을보십시오.
-0x80(%rbp,%rax,4) = *(%rbp + %rax * 4 + (-0x80))
그래서 다음 insruction :
mov %edx,-0x80(%rbp,%rax,4)
수단은 CPU 어드레스 (%rbp + %rax * 4 + (-0x80))
에서 메모리 레지스터 %의 EDX 값을 이동할 수 있도록,이 & T 스타일 조립체이다.
답장을 보내 주셔서 감사합니다. 바로 @ Fermat2357이 조금 더 일찍 ... –
@ Fermat2357, 맞습니다. 고맙습니다. –
답장을 보내 주셔서 감사합니다. 링크가 정말 도움이됩니다. –