2010-03-01 3 views
2

어셈블리 프로그래밍에서 push 및 pop과 같은 스택 작업을 완료 한 후에 스택의 효과적인 시작 주소를 얻을 수 있습니까?어셈블리 프로그래밍에서 스택의 시작 주소 받기

+0

시작 주소 (즉, 기본 주소는 변경되지 않음)를 의미합니까, 아니면 실제로 스택 상단의 주소 즉 스택 포인터의 현재 값을 의미합니까? –

+0

시작 기본 주소 ... 스택 상단에서도 수행 할 수 있지만 기본 주소는 사전에 –

+0

기본 주소는 변경되지 않습니다. 스택 포인터가 프로그램 시작 부분에 시작됩니다. 스택 주소의 맨 위에는/pop을 누를 때 변경되는 내용이 있습니다. 어느 것이 실제로 원하는가? –

답변

1

관례는 함수 시작 부분에 (E) SP를 (E) BP로 저장하고 로컬 변수 주소 지정에 (E) BP를 사용하는 것입니다.

0

가장 간단한 경우는 초기 스택 포인터를 변수에 저장하여 필요할 때 액세스하는 것입니다. 그렇지 않은 경우 플랫폼 고유 API (예 : Windows의 VirtualQuery)를 사용하여 현재 SP 값을 첫 번째 매개 변수로 사용하십시오. 기본 주소는 MEMORY_BASIC_INFORMATION 구조의 BaseAddress 필드에 있습니다. Posix 작업은 pthread 함수를 사용하여 수행 할 수 있습니다.

+0

Windows와 Posix를 편집하고 정리하십시오. 첫 번째 문제를 해결했습니다 ... – bmargulies

+0

어떻게하면 MASM에서 수행 할 수 있는지 설명해주세요. –