19


12

誰もがLinux x86-64アセンブリの基礎を学ぶことに関するドキュメントを持っていますか? 私はx86-64コンピューターを持っていてx86ではないので私は代わりにx86-64を学ぶことを考えていました。 )

多分誰かが私にいくつかのインセンティブを与えることができ、そして何を、どのようにそして何の文書で学ぶことについての方向性を与える。

私があなたに最も好まれているドキュメンテーションタイトルを教えてください、私は少しのPythonをコーディングします。

皆さんありがとう

3 Answer


24


一般的なアドバイス:

それは単なる「x86アセンブラ」ではありません。 各アセンブラは少し異なり、それらは一般的に互いに互換性がありません。 NASMアセンブラは、広く使用されており、インストールが簡単で、64ビットアセンブリをサポートしているのでお勧めします。

基本(レジスタ、条件付きジャンプ、算術演算など)を理解するために、x86アセンブラに関する優れた本を読んでください。 私が始めたとき、私はRandall Hydeによる_Art of Assembly_を読みました。

http://asm.sourceforge.netには、いくつかの優れたチュートリアルがあります。 しかし、64ビットモードでアセンブルしている場合は、Cの関数とシステムコールの呼び出し規約が異なることに注意してください。

あなたはCPUリファレンスマニュアルを必要とするでしょう。 個人的には、私はAMDのものを好みます。 あなたは、CPUマニュアルのボリューム1と3が欲しいです。 他のボリュームも同様に興味があるかもしれません。

64ビット特有のアドバイス

64ビットx86アセンブリは32ビットとほとんど後方互換性があるので、64ビットx86アセンブリは32ビットx86アセンブリとほとんど同じです。 あなたは64ビットレジスタと他のいくつかの機能にアクセスすることができます。

しかし、システムコールの規約は64ビットLinuxでは_完全に異なります。 あなたのカーネルに依存して、32ビットシステムコールは利用可能かもしれないし利用できないかもしれません。 さらに悪いことに、64ビットの呼び出し規約はあまり文書化されていません。 私はglibcソースコードの深さを調べることによってそれを理解しただけでした。

これを難しい方法で見つける手間を省くために、syscall番号はLinuxソースコードの `+ arch / x86 / include / asm / unistd_64.h `にあります。 システムコール番号は、 ` rax `レジスタに渡されます。 パラメータは、「 rdi 」、「 rsi 」、「 rdx 」、「 r10 」、「 r8 」、「 r9 」にあります。 呼び出しは ` syscall `命令で呼び出されます。 ` syscall `は ` rcx `レジスタを上書きします。 戻り値は「 rax +」です。 (簡単な例はlink://cs.lmu.edu/~ray/notes/linuxsyscalls [ここ]にあります。)


2


http://asm.sourceforge.net/を参照してください。[ここ] Linuxアセンブリ開発に最適な場所です。リソース、ドキュメント、リンクがあります。


1


  • x86の標準的な参照は、おそらくhttp://www.intel.com/products/processor/ manuals / index.htm [Intel 64およびIA-32アーキテクチャソフトウェア開発者向けマニュアル]です。 私はまだこのシリーズの2、3巻を持っています。PIIIが新しい時からさかのぼります。 AMD64 Architecture Programmer’s Manualもあります。Intelはx86-64設計におけるAMDのリードに完全には従わなかったため、興味深いかもしれませんまだ読んでいません。

    http://ref.x86asm.net/[X86 Opcode and Instruction Reference]は、宣伝されているとおりのものです(x86(-64)オペコードおよび命令など)。 特定の命令をすばやく検索したい場合に便利です。