한땀한땀 정성들인 코딩
hello world작성 본문
반응형
section .data
message:
db 'hello, world', 0
section .text
global _start
_start:
mov rax,4
mov rdi,1
mov rsi,message
mov rdx,13
syscall
mov rax,1
xor rdi,rdi
syscall
nasm -f elf64 -o p.o p.nasm #nasm 빌드
ld -o p p.o #컴파일
./p #실행
세그먼트 fault가 뜬다. why?
ni를 계속 해보면
0x000001 in ?? ()
이런식으로 다음 실행될 명령어(rip)가 1번지 주소를 가리키는데
1번지는 접근할수 없는 곳이다.
스택에 1이 저장되어 있었고 ret명령어가 rip에 1을 저장했다는것.
mov rax,60
syscall
추가하면 세그먼트 오류없이 잘 작동한다. 60은 64bit환경에선 exit함수
반응형
'메모' 카테고리의 다른 글
transmission 토렌트 사용 (0) | 2017.01.06 |
---|---|
리눅스 syscall 구조의 이해 (0) | 2017.01.06 |
컬렉션 (0) | 2017.01.06 |
제네릭클래스 (0) | 2017.01.06 |
클래스 상속,예외처리 (0) | 2017.01.06 |