FromNandの日記

自分的備忘録

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

【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つ…