기능에 입력 스택, 표준 프롤로그에 지역 변수를 참조하려면?방법 오프셋, 또는 RBP + 음의 오프셋 (offset)를 통해 RSP + 긍정적를 통해, <pre><code>push rbp mov rbp, rsp sub rsp, 128 ; large space for storing doubles, for example </code></pre> <p></p> 어떻게 지금 지역 변수를 참조하는 제대로
읽을 때 https://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames, 실제로 이해할 수 있습니다. 씁니다.
... 특정 로컬 변수의 메모리 위치를 (적절한 오프셋을 사용하여) 결정하기 위해 esp의 값을 안정적으로 사용할 수 없습니다. 이 문제를 해결하기 위해 많은 컴파일러가 ebp 레지스터의 음수 오프셋을 사용하여 로컬 변수에 액세스합니다.
신뢰할 수없는 이유는 무엇입니까? 그 질문까지 나는이 같은 RSP를 통해 지역 변수에 접근했다 :
mov rax, [rsp+.length] ; get length of array
mov [rsp+8], rax ; store sum at the stack
모든 것이 아주 능숙 스택 참조에 대한 RSP를 사용하여 이동합니다.
스택 포인터는 스택의 변수 주소를 결정하는 데 종종 사용할 수 있습니다.그러나이 함수가 가변 길이 배열이나'alloca()'와 동등한 것을 사용한다면 스택 포인터로부터의 오프셋을 더 이상 사용할 수 없다. – EOF
@EOF, 그래서 두 경우를 제외하고 모든 경우에 rsp와 관련된 주소 지정을 사용해야합니까? –