アセンブリ
勉強したこと ポインタ ポインタの指し先を書き換える場合はデータ長を指定しないといけない。 mov [test], 4 ; <- compile error mov byte[test], 4 ; <- ok!! 文字列 コードを写経した。基本的にこういうロジックはC言語で学んだことと同じくやるらしい。 …
勉強したこと call call <address>は以下の糖衣構文らしい push rip jmp <adress> ripはリターンアドレスを表す。 ret retとpop ripは同じ意味らしい? return a value raxに戻り値を格納する。rdxも同様の役割をもつらしく、第2の戻り値として利用される。 システムコール </adress></address>…
勉強したこと 呼び出し先退避レジスタ・呼び出し元退避レジスタ レジスタを守る規約として関数に関しては以下のように定められている。 呼び出し先退避レジスタ:rbx, rbp, rsp, r12-15 呼び出し元退避レジスタ:上記以外
勉強したこと syscall linuxのシステムコールのテーブルは以下で定義されている。カーネルが立ち上がるときにハンドラがこのように登録される。 linux/syscall_64.tbl at v4.15 · torvalds/linux · GitHub system callの実装はこのへんのどこかにあるはず li…
勉強したこと NASMでの実行ファイルの生成 リンクする必要があるらしい。 nasm -felf64 main.asm ld -o main main.o 徒然 movではメモリtoメモリのコピーができないらしい。レジスタ<->メモリはできるのかな? syscallで呼び出されるシステムコールはカーネ…
勉強したこと ハードウェアスタック スタックをハードウェアでサポートしており、rspレジスタを利用する。 rspレジスタにはスタックの最も上にある要素のアドレスが格納される。オペランドのサイズは通常8バイトを使うが2,4バイトも使える。 stack overflow…
動機 コンパイラを書くにあたって、アセンブリの知識が無いと難しいことがわかったので平行して勉強していこうかと。 最初の目標は再帰関数でフィボナッチ数を計算することにした。 勉強したこと おまじないたち おまじない扱いされてそうな彼ら .intel_synt…