問題タブ [att]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
162 参照

assembly - 構文定数 (レジスタ) とはどういう意味ですか?

Intel x86 アーキテクチャの AT&T 構文を学習していますが、次の構文の意味については少しわかりません。

  1. 低木 $1, 2(%esp)
  2. 増分 2(%esp)

私の最初の解釈は次のとおりでした。

  1. esp = (esp + 2) >> 1
  2. esp = esp + 2

このように増加を使用するための参照を見つけることができないため、ここではもっと根本的な欠陥があると思います。

私の解釈は正しいですか、それとも完全に的外れですか? お時間をいただきありがとうございます。

0 投票する
1 に答える
5635 参照

assembly - アセンブリ内の「変数」ラベルへの jmp (AT&T 構文)

ばかげているように聞こえるかもしれませんが、アセンブリ言語は初めてなので、ご容赦ください。

私は次のアセンブリ コードを持っています。これは、私がやろうとしていたことの簡略化されたバージョンです。

問題は、ある種の「変数」ラベルにジャンプするにはどうすればよいかということです。(ですから、このレーベルに飛びつきたい時もあれば、別のレーベルに行きたい時もあります... そういう考えです。)

0 投票する
1 に答える
877 参照

linux - .dataセクションのデータでの.orgディレクティブの使用:ldに関連して

GNU binutilsを使用して、ガスを使用して単純なブートローダーを構築する方法を理解するための努力の 中で、.orgを使用してロケーションカウンターを進めるファイルで、データを配置する場所をリンカーにどのように指示するかという質問に遭遇しました。ファイルサイズを512バイトに保ちながら。私はこれを行う方法を見つけることができないようです。

これを行おうとするアセンブリプログラムは次のとおりです。


UPDATE 次のコマンドを使用すると、次のエラーが発生します。

0 投票する
1 に答える
9678 参照

c - 初心者 asm: 呼び出しコードはどこですか?

この単純なカーネル モジュールを作成しました。

そして、コードがどのように asm に変換されるかを理解しようとしているので、それを objdump しました:

しかし、何かが他のものと完全に一致しません...

printk 関数はどのように呼び出されますか?? 「callq 9」しか見えませんが、そのオフセットは何も教えてくれません..それは次の命令です..だから何ですか?メッセージ「Kello」は正しく出力されますが、これが発生するコードが見つかりません!

その上..このコードは、セクション .rodata.str1.1 の文字列「Kello etc..」にどのようにアクセスできますか? これが ds レジスタにマップされたプログラム セグメントである場合、それにアクセスするには "ds:0" のようなものであるべきではありませんか?

私はかなり混乱しています..

0 投票する
2 に答える
1281 参照

c - カーネル クラッシュからの Linux システム コール (奇妙なオフセット)

カーネル モジュールからシステム コールを呼び出そうとしています。次のコードがあります。

このコードは機能せず、システムをクラッシュさせています (これはカーネル モジュールです)。

再配置情報を含むそのコードのダンプは次のとおりです。

私は疑問に思っています.. 49: R_X86_64_PC32 path-0x4 に -0x4 オフセットがあるのはなぜですか?

つまり、mode と dev は問題なく自動的に解決されるはずですが、パスはどうでしょうか。なぜ -0x4 オフセットなのですか?

私はそれを「補う」ことを試みました

lea 0x0(%rip),%rdi // これはどういうわけか -0x4 オフセットを追加します add $0x4, %rdi ....

しかし、コードはまだクラッシュしました。

どこが間違っていますか?

0 投票する
2 に答える
678 参照

c - インライン asm 不明

「d0」と「d1」は何に使われますか? すべてのコードを完全に説明していただけますか?ありがとう!

0 投票する
2 に答える
730 参照

macos - 基本的なアセンブリ プログラムの「不正な命令」 - Hello World でさえありません - なぜリンクが必要なのですか?

私はこれを理解しましたが、新しい質問(「なぜ?」)を別の質問に分割する代わりに、この問題の解決策と説明を同じページに保持するのが最善だと思います.

でカーネル割り込みを使用して、開始してすぐに終了する基本的なアセンブリプログラムを作成していますint 0x80。私の現在のコードは次のとおりです。

で組み立てた

実行すると、1 行のエラーが発生します。

奇妙なことに、すべてをコメントアウトしてもIllegal instruction、指示がまったくないにもかかわらず、結果が返されます。linkingリンクするファイルが他にないのに、ステップが抜けているのでしょうか? はい、そうです

編集:私の質問を言い換えさせてください.ライブラリやリンクするものがないのに、なぜリンクする必要があるのですか?

0 投票する
1 に答える
306 参照

macos - オペコードの AT&T 構文接尾辞は何ですか?

注: 私は BSD ベースのシステムを使用しているため、私の記憶が正しければ、呼び出されたサブルーチン/関数の引数がレジスタに配置されずにスタックにプッシュされることを意味します。

私はアセンブリを試していて、単純なカーネル出口プログラムを試してみたかった:

64ビットアセンブリで。

大きな違いは、レジスタの名前rが 32 ビット標準のeプレフィックスではなく、プレフィックス付きに変更されたことを読んだことを覚えています。

lしかし、すでに 32 ビットの long を意味している場合、64 ビット オペコードの新しい接尾辞は何ですか?

好奇心から、なぜそれrが新しいレジスタのプレフィックスなのですか?

また、さらに詳しい情報が得られる優れたリソースがあるかどうか。またはチュートリアル、チュートリアルは常に楽しいです。

0 投票する
2 に答える
1881 参照

macos - Mac OS Xランタイムエラーでの64ビットアセンブリ:「dyld:書き込み可能なセグメントがありません」および「Trace/BPTトラップ」

次のアセンブリプログラムを実行しようとした場合:

次のエラーが発生します。

これを引き起こしている可能性のあるアイデアはありますか?32ビットアセンブリの類似プログラムは正常に実行されます。

0 投票する
3 に答える
1443 参照

assembly - CPUでのプッシュおよびポップオペランドの必要性

なぜプッシュやポップのようなコマンドがあるのですか?

私が理解poppushていることから、基本的にはそれぞれ( movthen add)と(subthen mov)を実行するのと同じespです。


たとえば、次のことはしません。

と同等である:

スタックアクセスがない場合は修正してください(%esp-4)、私はまだアセンブリを学習しています


私が見ることができる唯一の真の利点は、両方の操作を同時に行うことがいくつかの利点を提供するかどうかです。しかし、どうすればよいかわかりません。