問題タブ [machine-code]
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 - アセンブリ コードはクロスプラットフォームですか?
0x042444FF
はマシン コードですinc dword ptr [esp+4]
が、 はアセンブリ コードですが、多くの要因に依存するため、マシン コードはクロスプラットフォームではないことがわかっています。
アセンブリコードはどうですか、それは CPU に依存しますか?
assembly - アセンブリ命令のマシン コードを取得するコマンド ライン ツールはありますか?
inc
どの部分が を意味するか、dword
またはその逆かを知るために、このツールが必要です。
assembly - 16進シーケンスは、あいまいさのないアセンブリにどのように変換されますか?
上記のようなセンセーションはさまざまな方法でセグメント化でき、各セグメントは対応するアセンブリ命令に変換できますが、各バイナリ実行可能ファイルには唯一のDEFINITEアセンブリがあります。あいまいさを回避する数学的原理は何ですか?
アップデート
ほとんどの票の答えは、実際には私の質問にまったく答えません。
cpu - CPU は自分の命令セットをどのように認識していますか?
パソコンの基本操作の質問ですが、どうやって聞けばいいのかわかりません。コンピューターに命令セットがあると言うとき、コンピューターはどのようにしてそのセットが何であるかを知るのでしょうか? ROMチップに保存されていますか?CPUのどこかに保存されていますか?ディスクを読み取ってマシンコードの処理を開始できるように、メーカーはそれをどこに配置しましたか?
binary - パディングのポイントは何ですか?
特に、私は OS X 上の Intel 32 用の Mach-O バイナリ ファイル フォーマットを読み込んでいます。FAT ヘッダーの後、最初のアーカイブのオフセットの前に大量のパディングがあります。このすべてのパディングのポイントは何ですか?
具体的には、FAT ヘッダーと最初のアーカイブ (特に mach_header) の間に 4000 バイト以上のパディングがあります。これらの余分なバイトをすべて含めるのはなぜですか?! OS X は、すべてのユニバーサル バイナリに 4 KB を追加するのが好きですか?
assembly - x86命令の長さを知る方法は?
アセンブリのさまざまな命令を見ていましたが、さまざまなオペランドとオペコードの長さがどのように決定されるかについて混乱しています。
それはあなたが経験から知っておくべきことですか、それともどのオペランド/演算子の組み合わせが何バイトを占めるかを知る方法がありますか?
例:
したがって、問題は次のとおりです。
与えられた命令を見て、そのオペコードが必要とするバイト数をどのように推測できますか?
compiler-construction - アセンブリ言語をマシン コードにコンパイルするには、どの段階が必要か
生のマシンコード命令を出力するアセンブラーファイルを取得するコンパイラーを作成しようとしています。
コンパイラの書き方に関するチュートリアルをたくさん見つけましたが、すべての段階がアセンブラのニーモニックに関連しているかどうか疑問に思っています。たとえば、単純化された段階ごとの形式のアセンブラーを考えると、字句解析はまったく必要ですか、それとも必要ですが、より単純な形式では必要ですか?
binary - 実行可能ファイル/オブジェクト ファイルから 0 と 1/マシン コードを確認するにはどうすればよいですか?
私はすでにこれを試しました.a.outファイルをテキストエディタで開きましたが、次のような指示が含まれた文字の束しか得られません:
üÙ
c - AMD64 --nopwアセンブリ命令?
nopw
このコンパイラ出力では、命令のマシンコードエンコーディングがどのように機能するかを理解しようとしています。
http://john.freml.in/amd64-noplで、「nopw」に関するいくつかの議論があります。4004d2-4004e0の意味を誰かが説明できますか?オペコードリストを見ると、66 ..
コードはマルチバイト拡張であるように見えます。数時間オペコードリストを調べようとしない限り、ここではおそらく私よりも良い答えを得ることができると思います。
そのasm出力は、Cの次の(非常識な)コードからのものであり、単純な無限ループに最適化されます。
でコンパイルするとgcc -O2
、コンパイラは無限再帰を認識し、それを無限ループに変換します。main()
実際、これは非常にうまく機能するため、関数を呼び出さずに実際にループしrecurse()
ます。
編集者注:NOPを使用したパディング関数は、無限ループに固有のものではありません。これは、Godboltコンパイラエクスプローラーにある、さまざまな長さのNOPを持つ関数のセットです。