問題タブ [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.

0 投票する
5 に答える
369 参照

c - 実行中の読み取り命令

タイトルが示すように、マシン コードの命令を実行中または実行後に読み取る方法はありますか? たとえば、C コードの任意のブロックがあり、そのブロックに入ったときにどの命令がコンパイルおよび実行されたかを知りたい場合、それを行う方法はありますか? この件に関するご意見をお寄せいただきありがとうございます。

編集:私がやろうとしていることに関するいくつかの動機:マシンコードがどのように作成されているかを実際に知る必要なく、どのようにコンパイルされたか、または現在実行されている命令を大まかに把握するプログラムが必要です。つまり、実行中のマシンコードをコピーして後で使用できるように、一部のコンパイラが以前にプログラムをコンパイルする際に行った大変な作業を使用したいのです。

0 投票する
8 に答える
3137 参照

c - ベア メタル マシンでソフトウェアを実行できますか?

オペレーティング システムのないマシンでプログラムを実行できるのでしょうか。

また、Linux のカーネルは C 言語で書かれており、ブート時にカーネルが実行されると聞いたので、コンパイルせずにコンピュータが言語を理解する方法を知りたいのですが?

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

execution - マシンコードとオブジェクトコードの違い

私はレベルの真っ只中にいて、コンピューティング試験の改訂を行っています。マシンコードとオブジェクトコードの違いを誰かに教えてもらえないかと思っていました。

シンプルにしてください。

0 投票する
7 に答える
3822 参照

assembly - この 8080 アセンブリ コードの「パズル」を解ける人はいますか?

私の友人は、解決しようとしているパズルの一部として 8080 アセンブリ コードを与えられました。これはコードです:

B、DE、C、および HL の値が必要です。

誰かがこれを解決したり、これを実行する方法について正しい方向に向けたりできますか?

アップデート

ネタバレ:解決策は次のようです:

C = 02、B = 06、D = 01、E = 41、H = 01、L = AA

0 投票する
5 に答える
12392 参照

assembly - Intel 80386 マシン コードをアセンブリ言語に変換するにはどうすればよいですか?

次のタスクを与えられました。

次の 16 進値のシーケンスを検討してください。

55 89 E5 83 EC 08 83 E4 F0 31 C9 BA 01 00 00 00 B8 0D 00 00 00 01 D1 01 CA 48 79 F9 31 C0 C9 C3

このバイト シーケンスは、32 ビット モードの Intel 80386 マシン語のサブルーチンを表します。

  • このサブルーチンの命令が実行されると、レジスタ %ecx および %edx に値が残ります。値は何ですか?

  • このサブルーチンによって行われる計算を実行し、このプログラムによって計算された %ecx と %edx の値を、サブルーチンの実行の最後に表示される C のプログラムは何ですか?

私は 80386 命令セットを覚えていないので、まずこれらのオペコード バイトをアセンブリ言語のニーモニックに変換する必要があります。それで、オンライン参照、16進値を命令にマッピングするテーブルなどはありますか?Intel の Web サイトを調べましたが、何も見つかりませんでした。それとも、これを解読するためのより良い方法はありますか...?

0 投票する
4 に答える
3238 参照

c++ - 単純なCPUエミュレーターの実装に関する質問

背景情報:最終的には、オリジナルの任天堂やゲームボーイなどの実機のエミュレーターを書きたいと思います。しかし、私はどこか、もっと簡単なところから始める必要があると決めました。私のコンピュータサイエンスのアドバイザー/教授は、彼が最初にエミュレートするために作成した非常に単純な架空のプロセッサの仕様を私に提供してくれました。1つのレジスタ(アキュムレータ)と16のオペコードがあります。各命令は16ビットで構成され、最初の4ビットにはオペコードが含まれ、残りはオペランドです。命令は、バイナリ形式の文字列として提供されます(例: "0101 0101 0000 1111")。

私の質問: C ++では、処理のために命令を解析するための最良の方法は何ですか?私の究極の目標を念頭に置いてください。これが私が考慮したいくつかのポイントです:

  1. コードは自己変更型であるため、命令を読みながら処理して実行することはできません。命令は後の命令を変更する可能性があります。これを回避するために私が見ることができる唯一の方法は、すべての変更を保存し、各命令に対して変更を適用する必要があるかどうかを確認することです。これは、各命令の実行との大量の比較につながる可能性がありますが、これは良くありません。そのため、命令を別の形式で再コンパイルする必要があると思います。

  2. オペコードを文字列として解析して処理することはできますが、命令全体を数値として受け取らなければならない場合があります。たとえば、増分オペコードは、命令のオペコードセクションでさえも変更する可能性があります。

  3. 命令を整数に変換する場合、intのオペコードまたはオペランドセクションだけを解析する方法がわかりません。各命令をintとして、オペコードをintとして、オペランドをintとして3つの部分に再コンパイルしたとしても、命令全体をインクリメントする必要があるため、問題は解決しません。その後、影響を受けるオペコードまたはオペランドを解析します。さらに、この変換を実行する関数を作成する必要がありますか、それとも「バイナリ形式」の文字列を整数に変換する関数(JavaのInteger.parseInt(str1、2)など)を持つC ++用のライブラリがありますか?

  4. また、ビットシフトなどの操作もできるようにしたいと思います。それをどのように達成できるかはわかりませんが、それがこの再コンパイルの実装方法に影響を与える可能性があります。

あなたが提供できる助けやアドバイスをありがとう!

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

assembly - SSE でプレフィックスを組み合わせる

SSE では、接頭部066h(オペランド・サイズのオーバーライド) 0F2H(REPNE) および0F3h(REPE) はオペコードの一部です。

非 SSE066hでは、32 ビット (または 64 ビット) と 16 ビットの操作を切り替えます。 文字列操作に使用されます0F2h。と(または) を同じ命令で使用できる0F3hように、それらを組み合わせることができます。これは意味があるためです。SSE 命令の動作は何ですか? たとえば、次のようになります (ここでは mod/rm を無視します)。066h0F2h0F3h

しかし、これは何ですか?

そしてどうですか?

競合する 2 つの REP プレフィックスを持つ次のものは言うまでもありません。

これらの仕様は何ですか?

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

c - ファイルから MachineCode をメモリにロードし、C で実行 -- mprotect が失敗する

こんにちは、生のマシンコードをメモリにロードしてCプログラム内から実行しようとしています.現在、プログラムを実行すると、メモリでmprotectを実行して実行可能にしようとすると壊れます. また、メモリが正しく設定された場合に実行されるかどうかも完全にはわかりません。現在、これを Ubuntu Linux x86 で実行しています (問題は Ubuntu の過保護にあるのでしょうか?)

私が現在持っているものは次のとおりです。

コンパイラの警告が表示されます:

プログラムがこのコードに到達していないので、アセンブラ コードが正常に動作しているかどうかを確認できません。

0 投票する
8 に答える
1480 参照

c++ - EXEがバイナリではないのはなぜですか?

16進エディタでEXEを開くと、さまざまなものが表示されるのはなぜですか。コンピューターがバイナリのみを理解する場合、ファイルに表示される可能性のある記号は2つだけではないでしょうか。ありがとう

0 投票する
7 に答える
870 参照

assembly - 各マシンコードが1つのアセンブリコードにのみマップできる必要がありますか?

これら2つが本質的に同じであると仮定します。

つまり、各アセンブリ命令はマシンコードにマップされます。

しかし、各マシンコードが1つのアセンブリコードにのみマップできる必要がありますか?