brk을 변경하여 힙 크기를 100 씩 늘리려고하고 있는데 코드가 작동하지 않는 이유를 모르겠습니다. 여기
는 시도 그 코드의 일부이다 할 것이 :힙 크기를 변경할 수 없음 AMD64
movq $0, %rdi
movq $12, %rax
syscall
movq %rax, InicialHeap
movq InicialHeap, %rsi
mov $str, %rdi
call printf
movq $100, %rdi
movq $12, %rax
syscall
movq %rax, %rsi
mov $str, %rdi
call printf
movq InicialHeap, %rdi
movq $12, %rax
syscall
movq InicialHeap, %rsi
mov $str, %rdi
call printf
movq $60, %rax
syscall
같은 인쇄해야합니다 프로그램 :
X (InicialHeap 인쇄)
X + 100 (인쇄 InicialHeap + 100)
X를 (인쇄 InicialHeap)
그러나 동일한 결과 "x"를 3 번만 인쇄합니다.
힙 크기를 늘리려면 어떻게해야합니까? the man page for int brk(void *addr);
describes의 참고 섹션으로
(100)를하지만, 세 번째 호출에 InicialHeap''에 저장된 값을 추가하지 :
명확하게 현재 코드가 작동하지 않을 수 있습니까? –
strace로 프로그램을 다시 실행하고 결과를 게시 할 수 있습니까? 예를 들어,'strace./a.out'. Strace는 모든 syscall을 출력하고 매개 변수를 디코딩하며 반환 값을 표시하고 디코딩합니다. 당신의 OS는 무엇입니까? 리눅스에서 brk는 조금 이상합니다 : http://linux.die.net/man/2/brk. – osgx
이 질문에 대한 대답은 아니지만 NASM (Not GNU assembler)을 사용하는 일부 32 비트 코드 (64 비트가 아님)는이 SO 답변에서 찾을 수 있습니다. http://stackoverflow.com/a/33903235/3857942. 이 코드는'brk' 32 비트 시스템 콜을 사용하지만, 최소한의 노력으로 어셈블러에서 64 비트 시스템 콜을 사용할 수 있도록 그 코드의 아이디어를 적용 할 수 있어야합니다. –