x64 linux c 호출 약속

1449 단어 linuxgccX64
에서 x64 다음 에 하나의 호출 약정 만 있 고 각각 ecx,edx,edi,esi,r8d,r9d 를 사용한다 고 언급 했다.
부동 소수점 사용 xmm 0...
c 코드:
#include "stdio.h"
#include "string.h"
void pp(int a,int b,int c,int d,int e,int f, int g, int h ,int i,int j)
{}
void main(){
        pp(1,2,3,4,5,6,7,8,9,0);
}

main 함수 의 어 셈 블 리 코드.
Dump of assembler code for function main:
   0x000000000040048e <+0>:     push   rbp
   0x000000000040048f <+1>:     mov    rbp,rsp
   0x0000000000400492 <+4>:     sub    rsp,0x20
   0x0000000000400496 <+8>:     mov    DWORD PTR [rsp+0x18],0x0
   0x000000000040049e <+16>:    mov    DWORD PTR [rsp+0x10],0x9
   0x00000000004004a6 <+24>:    mov    DWORD PTR [rsp+0x8],0x8
   0x00000000004004ae <+32>:    mov    DWORD PTR [rsp],0x7
   0x00000000004004b5 <+39>:    mov    r9d,0x6
   0x00000000004004bb <+45>:    mov    r8d,0x5
   0x00000000004004c1 <+51>:    mov    ecx,0x4
   0x00000000004004c6 <+56>:    mov    edx,0x3
   0x00000000004004cb <+61>:    mov    esi,0x2
   0x00000000004004d0 <+66>:    mov    edi,0x1
   0x00000000004004d5 <+71>:    call   0x400474 <pp>
   0x00000000004004da <+76>:    leave
   0x00000000004004db <+77>:    ret

어 셈 블 리 코드 를 통 해 알 수 있 듯 이 gcc x64 호출 매개 변 수 는 edi,esi,edx,ecx,r8d,r9d,edi 는 첫 번 째 매개 변수 인 esi 를 두 번 째 매개 변수 로 유추 하고 나머지 매개 변 수 는 스 택 으로 전달 합 니 다.

좋은 웹페이지 즐겨찾기