FromNandの日記

自分的備忘録

2019-12-03から1日間の記事一覧

多すぎるmakefileを分割する方法

まずディレクトリdirのなかにディレクトリdir1とdir2が格納されていたとする。・dirの中にはmakefileしかない。・dir1にはsrc1,makefileが含まれている。・dir2にはsrc2,makefileが含まれている。 この時、いちいちmakefileの中でほかのディレクトリのファイ…

【Linux】パイプ機能とリダイレクトの優先順位について

linuxにはパイプというものがあり、例えば // prog1.c #include<stdio.h> int main(void){ printf("hello world!\n"); return 0; } // prog2.c #include<stdio.h> int main(void){ char c; while( (c = getchar() ) != EOF){ printf("%c", c); } return 0; } これをそれぞれコ</stdio.h></stdio.h>…

【C言語】C言語におけるキャストの働きについて調べてみた

キャストについてよくわかっていなかったので調べた。 僕がよくわかっていなかったのは、次の3点である。 ・「符号あり・符号なしの間におけるキャスト」 ・「サイズの異なるキャスト」 ・「キャストによってどんな機械語が生成されるのか」 また、ここで対…

【アセンブラ】GASにおけるljmpとljmplの違いについて

gasって意外にネット上に情報がないので、ここに忘れないうちに示しておく。 ljmp - オペランドのアドレスから続く4byteをeipにいれ、5-6byteをcsにいれる farjmp: #void farjmp(int eip, int cs) ljmp *4(%esp) ret ljmpl - オペランドは二つあり、一つ目を…

【アセンブラ】GASでのマクロ関数の書き方

基本的にはつぎのように書けばいいらしい。 .macro <マクロの名前> <可変の名前> ~処理~ call \<可変の名前> //\<可変の名前>で参照することができる。あとcall以外もOK ~処理~ .endm 実際の例で確認しておきたい。 .globl asm_inthandler21, asm_inthandler…

【C言語】仮引数と実引数の違い

仮引数は引数を受け取る側の関数の引数のことで、実引数は関数を呼び出す側で実際に渡す引数のこと。 int main(void){ func(1, 2); // 実引数1, 2 return 0; } void func(int a, int b){ // 仮引数a, b // 処理 } ちょいちょい出てくるけど忘れやすいので...

【C言語】浮動小数点数の内部表現について

floatは符号部1bit,指数部8bit,仮数部23bit doubleは上記の順番に1bit, 11bit, 52bit また、指数部にはバイアスがかかっておりfloatは-127、doubleは-1023 仮数部はアドレスが高位なほうから0.5, 0.25, 0.125....と2のマイナスの乗数で表される IEEEという団…

【C言語】ヘッダファイルの書き方

【1】すべてのヘッダファイルにはインクルードガードをつけるべき。 // これを書くことで重複インクルードがなくなる #ifndef _HEADER_H #define _HEADER_H // 処理を書いていく #endif 【2】あるヘッダファイルAが常にあるヘッダファイルBに依存するとき、…

x86アセンブラのPUSH・POPについての疑問を実験してみた!

まずひとつ目は「espをpushするときにespはpushする前に値が変更されるのか、それともpushした後に変更されるのか」という疑問です。答えを言ってしまうとespがpushされた後に値は変更されます。当然ですけど。つまり、espの値を表示する関数などを作りたい…