작은 프로그램을 x86-64 어셈블리 (AT & T) 구문으로 작성했으며 올바르게 어셈블했지만 예상 한 결과를 얻지 못합니다. 서브 루틴을 수정해야하는 레지스터 %rdi
에 변수가 있습니다. 나중에 다른 용도로 사용하기 위해 원래 값을 유지해야합니다. 내가 원하는 것은 push
에 스택에 원래의 값을 넣고 서브 루틴이 끝나면 다시 검색합니다. 예를 들어, 변수가 %rdi
인 경우입니다.변수를 스택에 저장 (X86-64 어셈블리)
pushq %rdi
call subroutine
movq (%rsp), %rdi
지금이 올바른 방법인지 잘 모르겠습니다. 서브 루틴이 반환 값을 스택에 푸시한다고 읽었지만 변수를 검색하려고 할 때 오프셋을 포함해야한다는 의미입니까?
또한 스택 포인터를 16 바이트로 정렬해야한다는 것을 알고 있습니다. 그렇지 않으면 어셈블러가 내게 오류를 주겠습니까, 아니면 내 프로그램이 실패하는 이유가 될 수 있습니까?
그리고이 프로그램은 과제의 일부이므로 코드를 공유 할 수는 없지만 내 설명이 충분하기를 바랍니다.
코드를 공유 할 수없는 과제에 대한 비밀이 무엇인지 상상할 수 없습니다. – Artur
그것은 어떤 방식 으로든 비밀은 아니지만, 전체 프로그램을 웹 사이트에 게시하고 누군가 다른 사람에게 모든 실수를 바로 잡으라고 요청하면, 나는 부정 행위를 직면하게됩니다. – user680881