私は本を読んでいますReversing: Secrets of reverse engineeringの第 2 章で、著者は次のように述べています。
リバース言語とアセンブリ言語の学習を計画していて、特定のプラットフォームを念頭に置いていない場合は、IA-32 を使用してください。
この本は2005年に書かれたので、これはまだ関係があるのだろうか?リバース エンジニアリングやアセンブラなどの経験がない場合、IA-32 を選択する必要がありますか?
私は本を読んでいますReversing: Secrets of reverse engineeringの第 2 章で、著者は次のように述べています。
リバース言語とアセンブリ言語の学習を計画していて、特定のプラットフォームを念頭に置いていない場合は、IA-32 を使用してください。
この本は2005年に書かれたので、これはまだ関係があるのだろうか?リバース エンジニアリングやアセンブラなどの経験がない場合、IA-32 を選択する必要がありますか?
私が知っているほとんどの優れたリバースエンジニアは、Windows実行可能ファイル(特にマルウェア)がほとんどクローズドソースであるため、WindowsIA-32アセンブリから始めました。練習するIA-32アーキテクチャのWindowsには、多くのバイナリファイルがあります。その後、AT&Tのような別のアーキテクチャに切り替えることができます。すでにIA-32に慣れている場合は、他のアーキテクチャに少し調整する必要があります。
IA-32 は、アプリケーションに関する限り Windows で最も一般的に使用されるアーキテクチャですが、AMD64 を使用するアプリケーションもあります。それはすべて、リバースエンジニアリングしようとしているものに依存すると思います。
現実的には、現実世界のリバース エンジニアリングでは、今後も x86/IA-32 アセンブリから始めることになります。明らかに、最近 x64/AMD64 のテイクオーバーが見られましたが、これらの CPU は x86 コードを完全にネイティブに実行できます (ただし、システム コールと OS API には、WoW64 のようなエミュレーターの支援が必要です)。重要なことに、x64 命令セットの x86 サブセットには、とにかく初心者が最初に学びたいと思う基本的な命令が含まれています。
もちろん、リバース エンジニアリングでは、特に IA-32 コードに注意を向ける別の、はるかに説得力のあるインセンティブがあります。これは、ネイティブ x86 プログラムの大量の可用性です。純粋な逆の観点から言えば、x64 CPU 用のプログラムを作成する予定がある場合は、x64 CPU について知っていれば十分です。
すでにほのめかしたように、その違いは、x86 の知識を無価値にするほど大きくはありません。アーキテクチャ側にはいくつかの変更があります (例: レジスタの拡張RAX
や、それらを使用できるものへの変更など) と、命令セット側 (例: 一般的な命令のいくつかは 64 ビット レジスタ オペランドを予期するもの) にいくつかの変更がありますが、はるかに多くの変更があります。それは違うよりも同じです。
ARM などの他のプラットフォームもありますが、あなたの質問も話題になっていますが、これらはあなたが興味を持っている種類のデバイスでは一般的ではありません。デフォルトで x86 アセンブリを学習するという提案は良いものです。