FromNandの日記

自分的備忘録

2019-01-01から1年間の記事一覧

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

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

【x86アセンブラマニュアルの読み方】ModR/Mとかも

「https://code-examples.net/ja/q/e526bb」は日本語訳されていて、「https://wiki.osdev.org/X86-64_Instruction_Encoding#Registers」は割と完成されたガイドみたいな感じ。 「オペコード + ib」「オペコード + iw」「オペコード + id」というのは、オペコ…

【x86アセンブリ】movsx・movzx命令について

movsx命令は符号拡張転送命令、movzx命令はゼロ拡張転送命令です。 movsx・movzx共に、「mov + s | z + b | w | l + b | w | l」と記述します。 例えば、「movsbl %al, %eax」はalを32bitに符号拡張したものをeaxに転送する命令。 「movzwl %si, %eax」はsi…

【共有ライブラリ】おすすめサイト

共有ライブラリを動的再配置で解決する方法 https://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries 共有ライブラリを位置独立コードで解決する方法 https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-…

【x86バイナリ解析】知っておくと役立つ機械語4つ

【関数の始め】 push ebp (55) mov ebp, esp (89 e5) 【関数の最後】 leave (c9) ret (c3)

【EFLAGS】符号あり・なしにおける条件ジャンプについて【CF・OF・SF】

【CF・OF・SFについて】 CF → 符号なし計算で使用され、「足し算で繰り上がりした場合」や「CMP A, B」において「A < B」である場合にセットされます OF → 符号あり計算で使用され、「正 + 正 = 負」「負 + 負 = 正」「正 - 負 = 負」「負 - 正 = 正」という…

【EFLAGS】OF(オーバーフローフラグ)についてまとめてみた

OFは符号あり計算に使われるフラグで、JL・JGといった条件分岐に使用されます。 SFと併用されたりもします。 オーバーフローの起こる条件には以下の4つが存在します。 実際にデバッガを使用して確認したので問題ないはずです。 ・2つの正数を足したら結果が…

【EFLAGS】CF(キャリーフラグ)について考察してみた

CFは主に符号なし計算に使われるフラグで、JA・JBといった条件分岐にしようされます。 CFが立つのは次の3つの場合が存在します。 足し算した結果、繰上りが起こった場合 引き算した結果、繰下がりが起こらなかった場合 SEC命令によって強制的に立てた場合 …

【EFLAGS】サインフラグ(SF)についてまとめてみた

SFは主に符号あり計算に使用されます。 例えば、JL・JG・JLE・JGEなどですね。 内部的にはOFと併用されることが多いようです。 このフラグは計算結果の最上位ビットがそのままコピーされます。 例えば、「1000 0000」+「0010 1010」=「1010 1010」なのでSFは…

最右ビットに関する効率の良いビット演算について

ビット操作については「http://www.nminoru.jp/~nminoru/programming/bitcount.html」も参考にされたい。 ・最右の1であるビットを0にする 「x & (x - 1)」は最右の1であるビットを0にする。 xが00011000の場合はx-1は00010111になるので、「x & (x - 1) = 0…

【gdb】ステップオーバー・ステップイン・ステップアウトについて

gdbにおける「ステップオーバー・ステップイン・ステップアウト」についてまとめておきます 【高級言語のソースレベル】 ステップオーバー = n (next) ステップイン = s (step) ステップアウト = fin 【機械語レベル】 ステップオーバー = ni (nexti) ス…

【PEヘッダ】PEヘッダ解析における簡単な流れについて

大まかな流れは「https://tech.blog.aerie.jp/archive/category/Portable%20Executable」と「リバース・エンジニアリングバイブル」で確認してほしい。 中でも「https://tech.blog.aerie.jp/entry/2015/12/27/140649」」では、PEヘッダの流れが一望できる。 …

【位置独立コード】PICやPIEについて

↓によると、PIE(position-independent executable)とは、PIC(position-independent code)だけから構成された実行形式のこと https://ja.wikipedia.org/wiki/%E4%BD%8D%E7%BD%AE%E7%8B%AC%E7%AB%8B%E3%82%B3%E3%83%BC%E3%83%89 おそらく最もわかりやすいサイ…

【GAS】ENTER・LEAVE命令の使い方と同等コードの紹介

x86のアセンブラ命令にENTER・LEAVEという物がある。 ENTERは2つのオペランドをとり、ENTER $0, $0などと使用する LEAVEはアセンブリ関数の最後に記述することが多い ENTER $0, $5は次のようなコードと同等である(ただし、ENTERは速度が遅い...) push ebp mo…

割り込みの種類について

ハードウェア割り込み 周辺機器からの信号によって発生 トラップ INT、INTO命令の実行によって発生(ソフトウェア割り込み) フォールト 保護機能、MMU(メモリ管理ユニット)のチェックによって発生 アボート 処理を続けられないエラーが起きた場合に発生

【GAS】call・jmp命令のいろんな書き方【call *%eaxは?】

カーネルコードを書いていて詰まったのでまとめておきます 個人的によく使う「call・jmp」のうち、戸惑ったものを乗せます レジスタに対して付ける「*」が非常に分かりづらいです(call *%eaxやcall *4(%esp)など) https://stackoverflow.com/questions/21324…

【QEMU On Windows】参考になるサイトをみつけたよ!

なんだか、役立ちそうなコマンドがたくさん↓ http://honmat.cocolog-nifty.com/txt/2009/02/qemu-on-windows.html 個人的には「qemu.exe -L . -m 32 -localtime -std-vga -fda fdimage0.bin」「qemu.exe -L . -m 32 -localtime -std-vga fdimage0.bin」の2つ…

【VESA】VESAについてのまとまった資料

いつものようにosask.jp http://oswiki.osask.jp/?VESA 0から作るOS開発(日本語) http://softwaretechnique.jp/OS_Development/Tips/VESA/vbe01.html 海外のサイト(英語:中国語) http://www.faqs.org/faqs/pc-hardware-faq/supervga-programming/ https://w…

リンカスクリプトの頻出コマンド

詳しいことは「https://sourceware.org/binutils/docs/ld/Simple-Commands.html#Simple-Commands」におまかせ OUTPUT_FORMAT(output_mode) 出力バイナリのフォーマット OUTPUT_ARCH(arch) 対象のアーキテクチャを指定 「objdump -help」で対応するアーキテク…

【自作OS】CD・USBブートについて

【CDブート】 OSイメージを用意して、それをfdtoisoなどのツールでiso形式に変える。 次に、そのisoをBurnAwareなどのツールでCDに書き込む。 【USBブート】 Windows10の上でUbuntuの環境を構築しているのですが、bsコマンドでうまく書き込めないことがある…

【x86アセンブリ】よく使うアセンブリと機械語の対応表

細かい部分はOnline x86 and x64 Intel Instruction Assemblerで調べると良い 【CALL】 CALL(near) - FF m32CALL(far) - FF m16:32 【LEAVE・RET】 LEAVE - 0xc9 RET(near) - 0xc3 RET(far) - 0xcb 【PUSH系】 PUSH EAX - 0x50 PUSH ECX - 0x51 PUSH EDX - 0…

【gdb】ブレークポイントをアドレス指定で仕掛ける方法

gdbでアドレスを指定してブレイクポイントを仕掛けるには、先頭に「*」を付ける必要があるみたいです。 >> break *0x8049370 次のようにすると、行番号を指定したと思われるようです(多分...) もちろん、こんなに大きな数の行番号が指定されるととっくにプロ…

誘導起電力、逆起電力とは

モーターの回路を設計していると言葉の意味が分からなかったのでまとめる。 誘導起電力とは、モーターに電流が流れているかどうかは一切関係なく、モーターが磁界の中で回転しているだけで電源の電流とは逆向きの方向に電流を流そうとする性質がある。 逆起…

なぜパスコンの足は短く切らないといけないのか

1.抵抗になるから 2.単純に邪魔だから 3.ノイズを拾うから 4.足が曲がったりしてショートするかもしれないから こんな理由があるらしいです。 あと、バックアップコンデンサー(電力供給用)というのもあるらしくて これでも結局は足が短いに越したことはない…

リアクタンスとかインピーダンスとか

レジスタンス 抵抗器の抵抗値のこと リアクタンス コイルとかコンデンサの抵抗値のこと インピーダンス 上の二つを合わせたもの。上の二つの単位をx軸と虚数軸にとって絶 対値で大きさを表す。 インダクタンス 誘導という言葉の派生語。誘導電流の公式の係数…

【C言語】constについて気をつけることとか

const指定子がめんどくさいのでまとめておく 参考 : const修飾子について - Qiita 例えば次のコード const int *i; i is pointer to read-only int. int const *i; i is pointer to read-only int. int * const i; i is read-only pointer to int. 上の二つ…

【アセンブラ】アセンブラによってORG疑似命令の意味が違う!?

これまでにそれなりの種類のアセンブリを見てきたけど、混乱した箇所があったため整理する。 それは、ORG疑似命令についてである。 実はこの命令、アセンブリの種類によって意味が全く違うのである。 例えば、GASではORGは次のような意味になるらしい。 .org…

【SUFFIXES】makeにおけるサフィックスルールとは?

サフィックスルールとは、ある拡張子が現れたときに適応されるルールのこと。 例えば「.c」であれば、もともとあるサフィックスルールに則って「.o」ファイルが生成されたりする。 参考 : http://exlight.net/devel/make/basics.html この行でデフォルトのル…

makeについて色々まとめてみた

makeについてまとめておく。(参考書籍 oreilly make 改訂版) 1. makeはファイルの依存関係をOSに記録された各ファイルの情報をもとに詳細に理解 し、各ファイルを構成しているコンポーネントが最新であればコマンドを無視、そう でなければmakefileにかかれ…

【GCC】OS開発(組み込み)でよく使用するオプション

「https://qiita.com/h_hiro_/items/4db6a7478fb0ff333d9f」が参考になります。 【AS・GCC(狭義のコンパイラ)・LDで32bitのバイナリを生成するオプション】 as --32 gcc -m32 ld -m elf_i386 【GCC(コンパイラドライバ)におけるオプション】 -Wall 警告をす…