0
내가 메모리에 임시 변수를 저장하여 3을 반환하려고 간단한 조립 프로그램이 있습니다% ebp의 초기 값은 무엇입니까?
$ as out.s -o out.o
$ ld -s -o out out.o
$ ./out
segmentation fault
내 생각 : 그러나
.text
.global _start
_start:
movl $2, %ebx
mov %ebx, -0x4(%ebp)
movl $1, %ebx
add -0x4(%ebp), %ebx
movl $1, %eax
int $0x80
을, 이것은 내가 그것을 실행할 때 나에게 세그먼트 오류를 제공합니다 이것은 결코 초기화하지 않기 때문입니다 %ebp
. 레지스터를 사용하고 %ebp
을 기준으로 메인 메모리에 액세스하지 않으면 프로그램이 정상적으로 실행됩니다.
초기화 할 값은 무엇입니까? 시작시 프로그램 malloc
자체 스택을 사용해야합니까?
실제로 모든 함수가'% ebp'를 프레임 포인터로 사용하고 있다면, 그것은 이전 프레임으로 초기화 될 것입니다. 그러나 그것은 가정 일 것입니다. 8-) –
이것은 여전히 segfaults입니다. 'movl % esp, % ebp''subl $ 4, % esp''movl % ebx, -4 (% ebp)'그게 전부일까요? –
어떤 명령에서 코드 세분화가 정확히 이루어지며 그 당시 관련 레지스터의 값은 무엇입니까? –