ウホウホゴリラッホ

主に勉強したことをまとめていきます。twitter:@pytran3

アセンブリ

アセンブリ勉強記録 7

勉強したこと ポインタ ポインタの指し先を書き換える場合はデータ長を指定しないといけない。 mov [test], 4 ; <- compile error mov byte[test], 4 ; <- ok!! 文字列 コードを写経した。基本的にこういうロジックはC言語で学んだことと同じくやるらしい。 …

アセンブリ勉強記録 6

勉強したこと call call <address>は以下の糖衣構文らしい push rip jmp <adress> ripはリターンアドレスを表す。 ret retとpop ripは同じ意味らしい? return a value raxに戻り値を格納する。rdxも同様の役割をもつらしく、第2の戻り値として利用される。 システムコール </adress></address>…

アセンブリ勉強記録 5

勉強したこと 呼び出し先退避レジスタ・呼び出し元退避レジスタ レジスタを守る規約として関数に関しては以下のように定められている。 呼び出し先退避レジスタ:rbx, rbp, rsp, r12-15 呼び出し元退避レジスタ:上記以外

アセンブリ勉強記録 4

勉強したこと syscall linuxのシステムコールのテーブルは以下で定義されている。カーネルが立ち上がるときにハンドラがこのように登録される。 linux/syscall_64.tbl at v4.15 · torvalds/linux · GitHub system callの実装はこのへんのどこかにあるはず li…

アセンブリ勉強記録 3

勉強したこと NASMでの実行ファイルの生成 リンクする必要があるらしい。 nasm -felf64 main.asm ld -o main main.o 徒然 movではメモリtoメモリのコピーができないらしい。レジスタ<->メモリはできるのかな? syscallで呼び出されるシステムコールはカーネ…

アセンブリ勉強記録 2

勉強したこと ハードウェアスタック スタックをハードウェアでサポートしており、rspレジスタを利用する。 rspレジスタにはスタックの最も上にある要素のアドレスが格納される。オペランドのサイズは通常8バイトを使うが2,4バイトも使える。 stack overflow…

アセンブリ勉強記録

動機 コンパイラを書くにあたって、アセンブリの知識が無いと難しいことがわかったので平行して勉強していこうかと。 最初の目標は再帰関数でフィボナッチ数を計算することにした。 勉強したこと おまじないたち おまじない扱いされてそうな彼ら .intel_synt…