x86 어셈블리에서 함수 호출
다음은main 이외에 세 가지 기능이 있는 간단한 프로그램입니다.
global main
extern printf
section .text
main:
mov rdi, 5
call times2
mov rdi, rax
call print_value
call exit
times2:
push rbp
mov rbp, rsp
mov rax, rdi
add rax, rax
mov rsp, rbp
pop rbp
ret
print_value:
push rbp
mov rbp, rsp
push rdi
mov rdi, fmt
pop rsi
mov rax, 0
call printf wrt ..plt
mov rsp, rbp
pop rbp
ret
exit:
mov rdi, 0 ; exit code 0
mov rax, 60 ; system call for exit
syscall
section .data
fmt: db "The value is %d", 10, 0
함수에 값 전달
위의 코드는 리눅스 64비트 ABI를 따르는데, 그 중 여섯 개의 매개 변수 (정수와 바늘) 가 레지스터를 통해 전달된다.창고나 하드코딩 메모리 위치에서 파라미터를 전달할 수도 있다.
함수 서문과 결어
함수의 시작과 끝
times2
함수 서문과 끝소리라고 불린다. push rbp
mov rbp, rsp
...
mov rsp, rbp
pop rbp
ret
창고를 사용하겠다는 약속이오.호출된 함수에 대한 새 창고 프레임을 만들고, 끝은 호출된 함수에 대한 창고 프레임을 복원합니다.
Reference
이 문제에 관하여(x86 어셈블리에서 함수 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jmourtada/calling-functions-in-x86-assembly-2fpl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)