FromNandの日記

自分的備忘録

2019-10-01から1ヶ月間の記事一覧

交換法則・結合法則・分配法則の定義について

交換法則 3 + 7 = 7 + 3 といったように、順番を交換できるという法則。 結合法則 (2 * 3) * 5 = 2 * (3 * 5) といったように、カッコをどこにつけても同じだという法則。 分配法則 3 * (5 + 2) = 3 * 5 + 3 * 2 といったように、カッコを外せるという法則。…

【C言語】構造体名は構造体への先頭アドレスを表すか?

構造体の文法について理解が及ばないところがあったので。 時に、下のプログラムは文法上の誤りを含んでいる。 #include<stdio.h> struct STR { int a, b, c; }; int main(void){ struct STR str; printf("str = %p, &str = %p, &str.a = %p\n", str, &str, &str.a); </stdio.h>…

バイナリ解析系コマンド(objdump readelf)などをまとめてみた

objdump 「-d」でテキスト領域だと思われるセクションのみをディスアセンブルする。 「-S」で可能であればソースコードとディスアセンブリしたものを表示する。このオプションでは暗黙に「-d」が指定される。 「-h」ではセクションの情報のみを表示する。 「…

Linuxにおけるアプリケーションの開始から終了まで

「Hello World」の本に書いてあったことを自分向けにまとめただけ。 簡単にするためにあえて省いたものやただ単に僕が間違えている可能性もあるのでご参考程度に^^ 【execve】 プログラムの実行はスタートアップ関数から行われると思われがちだが、実際には…

動的リンクと共有ライブラリ(GOT・PLT)について

プログラミングをやっているとしばしば出てくるこれらの単語... あまり意味が理解できていなかったのでまとめておきます。 また、次のサイトは非常にわかりやすく解説されている。 位置独立形式(PIC・PIE)の意味もちょっと分かったような気がする。 https://…

GCCのオプションについておさらいしておく

gccはコンパイルドライバと呼ばれ、プリプロセス・コンパイル・アセンブル・リンクといった作業を一挙に引き受けている。 実際には内部で適切なプログラムを呼び出しており、コンパイラはcc1、アセンブラはas、リンカはcollect2などが使用されているらしい。…

【objdump】フラットなバイナリファイルをディスアセンブルする方法

これまでPEやELFといったファイルは解析してきたが、それらの形式に沿っていないファイルを解析したことは少なかったのでまとめておく。 ちなみに環境はx64を前提とする。 https://stackoverflow.com/questions/1737095/how-do-i-disassemble-raw-16-bit-x86…

【C言語】文字列にアンダーラインを入れたり、色を変えたりする方法

printfのフォーマット文字列の部分に「\x1b[A;Bm」を記述すると、そのあとに表示される文字列の属性を変更することができます。 ちなみにAの部分には0か1が入り、0は暗い・1は明るいということらしいです。 Bの部分には何が入るのかイマイチわかりませんが、…