Presentation is loading. Please wait.

Presentation is loading. Please wait.

X64 函数呼び出し規約 長谷川啓 2018.09.14.

Similar presentations


Presentation on theme: "X64 函数呼び出し規約 長谷川啓 2018.09.14."— Presentation transcript:

1 x64 函数呼び出し規約 長谷川啓

2 函数呼び出し規約1 最初の4つの引数はレジスタ渡しにする 5つ目以降の引数はRSP相対+0x20の位置に書き込む 引数 整数型かポインタ型
RCX,RDX,R8,R9を使う 実数型 xmm0, xmm1, xmm2, xmm3を使う 可変個引数の函数の場合はRCX,RDX,R8,R9も使う 例 printf(“%f\n”, 1.5); RCX に”%f\n” のアドレス RDX に1.5のビット表現 xmm1 に1.5セット long double 構造体と同じ. sizeof(long double)=16で実装する. 構造体 呼び出し側でコピーを作成してそのアドレスを渡す

3 函数呼び出し規約2 戻り値 整数型かポインタ型 実数型 構造体 RAXを使用する xmm0 を使用する long double
構造体と同じ 構造体 呼び出し側は戻り値の領域を確保して、そのアドレスを第一引数として渡す

4 f の戻り アドレス f が呼び出され た直後のRSP はここを指して いる

5 RSP f が呼び出された直後のRBP f の戻り アドレス

6 RSP RBP f が呼び出された直後のRBP f の戻り アドレス

7 RSP RBP f が呼び出された直後のRBP f の戻り アドレス

8 RSP RBP f が呼び出された直後のRBP f の戻り アドレス f が呼び出されたときのRCX, RDX, R8, R9 がここに保存される

9 函数 f を実行中に函数 g を呼び出す直前のスタックの様子
g が呼び出された直後のRBPを保存する領域 g の戻りアドレス を保存する領域 RSP RCX,RDX,R8,R9を退避する領域 g の第5引数 f のローカル変数及び中間変数 RBP f が呼び出された直後のRBP f の戻り アドレス f が呼び出されたときの引数 函数 g の5引数はすべて整数型かポインタ型とする


Download ppt "X64 函数呼び出し規約 長谷川啓 2018.09.14."

Similar presentations


Ads by Google