- Amazon.co.jp ・本 (416ページ)
- / ISBN・EAN: 9784844334798
作品紹介・あらすじ
リバースエンジニアリング(Reverse Engineering)とは、完成された製品から、製造方法・動作原理・設計図・ソースコード等を調査することだ。本書は、ソフトウェアのリバースエンジニアリングについて詳細に解説する。
感想・レビュー・書評
-
2017/11/20 2回めの観測
詳細をみるコメント0件をすべて表示 -
いくつかの訂正と感想
20p
以前のコードでは「mov esp, ebp」を使用したので、
→ 以前のコードでは「mov ebp, esp」を使用したので、
19-22p
esp,ebpがなにかの説明がなかったので理解に苦しむ。
補足
・intel系のcpuはスタックに積んだ時に上位アドレスから積んでいく。(amd系のcpuでもintelと互換性があり、この条件は同じ)そのため、たとえば4byteずつスタックを積んでいく場合は、次のpopするポイントは-4 * n個になる。
・espはスタックポイント。スタックから次にpopするアドレスを示してる
・ebpはベースポイント。スタックが始まるアドレス
・pushうんぬんの話を理解するには、まずcall命令の動きとして、「リターンアドレスをスタックに積んだ上でサブルーチンにジャンプする」ことを覚える。その時にスタックポイントにebpをもってきて新しいスタックが生成される。
(ebpの中には前回(サブルーチンへジャンプする前の)ebpのアドレスが入る。)
つまりpopする場所にebpがあるのでebp + 4でリターンアドレス、ebp + 8で第1引数などが説明できる。
この説明がないからどうしてもebpではなく、espからオフセットを出していくのでは?とすごく疑問になっていた。
*読み終わるまで順次に追加予定*