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

Slides:



Advertisements
Similar presentations
メモリとポインタ. プログラムの前提 コンピュータは、0と1で計算をし、 0と1でデータを保存している。 メモリを学ぶのに必要な知識である。
Advertisements

アルゴリズムとデータ構造 第2回 線形リスト(復習).
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
2006/11/9 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
コンパイラ演習 第 4 回 (2011/10/27) 中村 晃一 野瀬 貴史 前田 俊行 秋山 茂樹 池尻 拓朗 鈴木 友博 渡邊 裕貴
第4回放送授業.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
関数 関数とスタック.
プログラミングII 第 7 回 オブジェクトの配列 New, delete 参照 田向.
構造体 構造体, 構造体とポインタの組み合わせ,.
プログラミング論 関数ポインタ と 応用(qsort)
プログラミング2 関数
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
目的コードの生成 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第9章.
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
#include <stdio. h> int main() { /. 表示をする
関数の定義.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
後期中間試験練習問題 12月3日(月)9:00~ 第3演習室.
プログラミング 4 記憶の割り付け.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
プログラミング 3 構造体(2).
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第11回 プログラミングⅡ 第11回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
コンパイラ資料 実行時環境.
一時的な型 長谷川啓
フロントエンドとバックエンドのインターフェース
型の compatibility とポインタ演算
オブジェクト指向プログラミングと開発環境
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
アルゴリズムとプログラミング (Algorithms and Programming)
C++ 構文解析 構文解析器の状態保存と復元
参照されないリテラル 長谷川啓
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
ポインタとポインタを用いた関数定義.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
コンピュータアーキテクチャ 第 5 回.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
アルゴリズムとデータ構造1 2009年6月15日
第5回 プログラミングⅡ 第5回
コンピュータアーキテクチャ 第 5 回.
ドキュメントジェネレータ 詳細仕様 長谷川啓
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
Inline 展開のアルゴリズム 長谷川啓
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
アルゴリズムとデータ構造 2010年6月17日
Tacsim の実装 - 実行部分 長谷川啓
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
デフォルト引数 長谷川啓.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
Presentation transcript:

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

函数呼び出し規約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で実装する. 構造体 呼び出し側でコピーを作成してそのアドレスを渡す

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

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

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

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

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

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

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