19

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

何を、どのように、どのドキュメントを使用して学習するかについて、誰かが私にインセンティブと指示を与えることができるかもしれません。

最も好きなドキュメントのタイトルを教えてください。私は少し Python をコーディングしています。これは低レベル言語での最初の試みであり、それに専念する準備ができています。

皆さんありがとう

4

3 に答える 3

24

一般的なアドバイス:

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

x86アセンブラーに関する優れた本を読んで、基本(レジスター、条件付きジャンプ、算術など)の感触をつかんでください。始めたとき、ランドール・ハイドのアート・オブ・アセンブリーを読みました。

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

CPUリファレンスマニュアルが必要になります。個人的には、AMDのものが好きです。CPUマニュアルのボリューム1と3が必要です。他の巻も興味深いかもしれません。

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

64ビットx86アセンブリは32ビットx86アセンブリとほぼ同じです。これは、64ビットx86が32ビットとほとんど下位互換性があるためです。64ビットレジスタと他のいくつかの機能にアクセスできます。一部のあいまいな命令は無効になり、残りは32ビットと同じです。

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

これを難しい方法で見つける手間を省くために、syscall番号はLinuxのソースコードの下にありarch/x86/include/asm/unistd_64.hます。システムコール番号はraxレジスタに渡されます。パラメータは、、、、、、、rdirsiあります。呼び出しは命令で呼び出されます。レジスタを上書きします。リターンはにあります。(簡単な例はここにあります。)rdxr10r8r9syscallsyscallrcxrax

于 2009-11-29T03:32:47.860 に答える
2

ここを見てください。Linuxアセンブリ開発に最適な場所です。リソース、ドキュメント、リンクがあります。

于 2009-10-16T01:25:40.913 に答える
1

x86の正規の参照は、おそらくインテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルです。P IIIが新しくなったときから、私はまだこのシリーズのいくつかのボリュームを持っています。AMD64アーキテクチャプログラマーマニュアルもあります。Intelはx86-64設計でAMDのリードに完全には従わなかったため、興味深いかもしれませんが、私はそれを読んでいません。

X86オペコードと命令リファレンスは、宣伝されているとおりです。x86(-64)オペコードと命令だけです。特定の命令をすばやく検索したい場合に便利です。

于 2009-10-16T01:25:55.443 に答える