問題タブ [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.
assembly - 構文定数 (レジスタ) とはどういう意味ですか?
Intel x86 アーキテクチャの AT&T 構文を学習していますが、次の構文の意味については少しわかりません。
- 低木 $1, 2(%esp)
- 増分 2(%esp)
私の最初の解釈は次のとおりでした。
- esp = (esp + 2) >> 1
- esp = esp + 2
このように増加を使用するための参照を見つけることができないため、ここではもっと根本的な欠陥があると思います。
私の解釈は正しいですか、それとも完全に的外れですか? お時間をいただきありがとうございます。
assembly - アセンブリ内の「変数」ラベルへの jmp (AT&T 構文)
ばかげているように聞こえるかもしれませんが、アセンブリ言語は初めてなので、ご容赦ください。
私は次のアセンブリ コードを持っています。これは、私がやろうとしていたことの簡略化されたバージョンです。
問題は、ある種の「変数」ラベルにジャンプするにはどうすればよいかということです。(ですから、このレーベルに飛びつきたい時もあれば、別のレーベルに行きたい時もあります... そういう考えです。)
linux - .dataセクションのデータでの.orgディレクティブの使用:ldに関連して
GNU binutilsを使用して、ガスを使用して単純なブートローダーを構築する方法を理解するための努力の 中で、.orgを使用してロケーションカウンターを進めるファイルで、データを配置する場所をリンカーにどのように指示するかという質問に遭遇しました。ファイルサイズを512バイトに保ちながら。私はこれを行う方法を見つけることができないようです。
これを行おうとするアセンブリプログラムは次のとおりです。
UPDATE 次のコマンドを使用すると、次のエラーが発生します。
c - 初心者 asm: 呼び出しコードはどこですか?
この単純なカーネル モジュールを作成しました。
そして、コードがどのように asm に変換されるかを理解しようとしているので、それを objdump しました:
しかし、何かが他のものと完全に一致しません...
printk 関数はどのように呼び出されますか?? 「callq 9」しか見えませんが、そのオフセットは何も教えてくれません..それは次の命令です..だから何ですか?メッセージ「Kello」は正しく出力されますが、これが発生するコードが見つかりません!
その上..このコードは、セクション .rodata.str1.1 の文字列「Kello etc..」にどのようにアクセスできますか? これが ds レジスタにマップされたプログラム セグメントである場合、それにアクセスするには "ds:0" のようなものであるべきではありませんか?
私はかなり混乱しています..
c - カーネル クラッシュからの Linux システム コール (奇妙なオフセット)
カーネル モジュールからシステム コールを呼び出そうとしています。次のコードがあります。
このコードは機能せず、システムをクラッシュさせています (これはカーネル モジュールです)。
再配置情報を含むそのコードのダンプは次のとおりです。
私は疑問に思っています.. 49: R_X86_64_PC32 path-0x4 に -0x4 オフセットがあるのはなぜですか?
つまり、mode と dev は問題なく自動的に解決されるはずですが、パスはどうでしょうか。なぜ -0x4 オフセットなのですか?
私はそれを「補う」ことを試みました
lea 0x0(%rip),%rdi // これはどういうわけか -0x4 オフセットを追加します add $0x4, %rdi ....
しかし、コードはまだクラッシュしました。
どこが間違っていますか?
c - インライン asm 不明
「d0」と「d1」は何に使われますか? すべてのコードを完全に説明していただけますか?ありがとう!
macos - 基本的なアセンブリ プログラムの「不正な命令」 - Hello World でさえありません - なぜリンクが必要なのですか?
私はこれを理解しましたが、新しい質問(「なぜ?」)を別の質問に分割する代わりに、この問題の解決策と説明を同じページに保持するのが最善だと思います.
でカーネル割り込みを使用して、開始してすぐに終了する基本的なアセンブリプログラムを作成していますint 0x80
。私の現在のコードは次のとおりです。
で組み立てた
実行すると、1 行のエラーが発生します。
奇妙なことに、すべてをコメントアウトしてもIllegal instruction
、指示がまったくないにもかかわらず、結果が返されます。linking
リンクするファイルが他にないのに、ステップが抜けているのでしょうか? はい、そうです
編集:私の質問を言い換えさせてください.ライブラリやリンクするものがないのに、なぜリンクする必要があるのですか?
macos - オペコードの AT&T 構文接尾辞は何ですか?
注: 私は BSD ベースのシステムを使用しているため、私の記憶が正しければ、呼び出されたサブルーチン/関数の引数がレジスタに配置されずにスタックにプッシュされることを意味します。
私はアセンブリを試していて、単純なカーネル出口プログラムを試してみたかった:
64ビットアセンブリで。
大きな違いは、レジスタの名前r
が 32 ビット標準のe
プレフィックスではなく、プレフィックス付きに変更されたことを読んだことを覚えています。
l
しかし、すでに 32 ビットの long を意味している場合、64 ビット オペコードの新しい接尾辞は何ですか?
好奇心から、なぜそれr
が新しいレジスタのプレフィックスなのですか?
また、さらに詳しい情報が得られる優れたリソースがあるかどうか。またはチュートリアル、チュートリアルは常に楽しいです。
macos - Mac OS Xランタイムエラーでの64ビットアセンブリ:「dyld:書き込み可能なセグメントがありません」および「Trace/BPTトラップ」
次のアセンブリプログラムを実行しようとした場合:
次のエラーが発生します。
これを引き起こしている可能性のあるアイデアはありますか?32ビットアセンブリの類似プログラムは正常に実行されます。
assembly - CPUでのプッシュおよびポップオペランドの必要性
なぜプッシュやポップのようなコマンドがあるのですか?
私が理解pop
しpush
ていることから、基本的にはそれぞれ( mov
then add
)と(sub
then mov
)を実行するのと同じesp
です。
たとえば、次のことはしません。
と同等である:
スタックアクセスがない場合は修正してください(%esp-4)
、私はまだアセンブリを学習しています
私が見ることができる唯一の真の利点は、両方の操作を同時に行うことがいくつかの利点を提供するかどうかです。しかし、どうすればよいかわかりません。