問題タブ [opcode]
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.
php - PHP オペコードの表示
重複の可能性:
PHP のオペコードを取得するには?
特定の言語での開発を深く掘り下げるとき、ある時点で、可能であればその言語のオペコードを表示して、コードがどのように解釈またはコンパイルされるかをより深く理解できるようにしたいと考えています。C/C++ では通常、IDE で逆アセンブリ ビューに切り替えるか、コンパイラに命令を出力させることができます。Flash、flasm などのユーティリティを使用して、何が起こっているかを確認できます。
PHP のオペコードを表示するオプションはありますか? コマンド ライン パラメーターを確認しましphp
たが、何も表示されませんでした (見落としただけでしょうか?)。
assembly - PowerPCオペコードテーブル?
私は自分の学習目的でPowerPCエミュレーターを開発することに興味があります。PowerPCアセンブリでのプログラミングに関するかなりの量のリソースを見つけましたが、かなりの時間をかけて調べた後、まだどこにも命令/オペコードマッピングテーブルを見つけることができませんでした。もちろん、エミュレーターを作成できるようにするには、オペコードが必要です。どこにありますか?
assembly - Intel x86オペコードリファレンス?
x86で任意のオペコード(たとえば)が何を意味するかを調べるための比較的迅速で簡単な方法は何ですか?0xC8
インテルソフトウェア開発者用マニュアルは、検索するのが面白くありません...
c++ - C /C++でのChip8オペコードのデコードと照合
私はエミュレーションの紹介としてChip8エミュレーターを書いていますが、ちょっと迷っています。基本的に、私はChip 8 ROMを読み取り、それをメモリ内のchar配列に格納しました。次に、ガイドに従って、次のコードを使用して、現在のプログラムカウンター(pc)でオペコードを取得します。
チップ8オペコードはそれぞれ2バイトです。これは、memory [pc]に8ビットスペースを追加し(<< 8を使用)、次にmemory [pc + 1]をそれにマージして(|を使用)、結果をオペコード変数に格納することとして漠然と理解しているガイドのコードです。 。
しかし、オペコードが分離されたので、どうしたらよいかわかりません。私はこのオペコードテーブルを使用していますが、読み取った16進オペコードをそのテーブルのオペコード識別子と照合することに関して基本的に迷っています。また、私が読んでいるオペコードの多くにはオペランドも含まれていることを認識しています(後者のバイトを想定していますか?)。これはおそらく私の状況をさらに複雑にします。
ヘルプ?!
c# - Br_S OpCode を使用して、Reflection.Emit.Label を使用して次の命令を指す
メソッドを発行するために IL の解析を試しています。各文字列が IL 命令である string[] 内のメソッドの IL コードを取得しました。この配列をループして、ILGenerator を使用して OpCode を追加しています。
再現する必要がある IL は次のとおりです。
そして、ここに私が出力として得ているものがあります:
ご覧のとおり、br.s 呼び出しはそれ自体を指しているため、もちろん無限ループが発生します。ソースのように次の命令を指すようにするにはどうすればよいですか? これは Reflection.Emit.Label の使用に関係していますが、どのように機能するかはわかりません。
編集ちなみに、上記のILはこの単純な方法のためのものであり、
assembly - JMP と一連の NOP のどちらが速いですか?
私はバイナリ変換を実装しており、約 16 オペコードの長さの一連の NOP (0x90) を処理する必要があります。このようなシーケンスの開始時に JMP を (最後まで) 配置した方がパフォーマンスが向上しますか?
assembly - MIPSスタックフレーム(および「addiu」命令の混乱)
私はMIPSを初めて使用し、関数の分解を理解しようとしています。
(編集:/lib/ld-uClib.so.0に動的にリンクされ、通常のlibc関数を使用するため、uClibcツールチェーンを使用してCで記述されていると想定します。したがって、呼び出し元のプロシージャとスタックフレームなどが必要です。 。)。
関数の開始時にそれは行います
次に、関数の最後に次のことを行います。
質問1:
インターネットでしばらく検索しているにもかかわらず、スタックフレームでgpがどのように使用されるのかまだよくわかりません。
特に、私が読んだ文書によると、呼び出し手順の標準は、関数入力としてa0-a3が使用され、関数出力としてv0-v3が使用され、s0-s8は呼び出し全体で保持され、t0-t9はどの呼び出しでも保持されません。したがって、s0-s8のプッシュとポップは理にかなっています。 しかし、なぜ世界でt9の値に従ってgpを設定しているのですか?
質問2:
スタックポインタが2回移動する理由がわかりません。ローカルスペースを2回予約しているようです。
その上、addiu命令は負の数で分解されています。これは、「u」が符号なしを意味するため意味がありませんが、実際に負の数と見なさない限り、コードは意味がありません。en.wikipedia.org/wiki/MIPS_architectureでオペコードを調べて、オペコードを再確認しました。そして、それは確かに「addiu」であり、「addi」ではありません。私はここでとても混乱しています。
linux - %gsレジスタのないx86のサブセット:エミュレーションにトラップする代わりに%gsを使用するバイナリパッチコード?
ここで説明するには複雑すぎる理由から、x86のサブセットであるプラットフォームでx86GCCでコンパイルされたLinuxプログラムを実行する必要があります。このプラットフォームには%gsレジスタがありません。つまり、GCCは%gsレジスタの存在に依存しているため、エミュレートする必要があります。
現在、プログラムが%gsレジスタにアクセスしようとしたときに例外をキャッチし、それをエミュレートするラッパーがあります。しかし、これは犬が遅いです。ELFのオペコードに同等の命令で事前にパッチを適用して、トラップアンドエミュレートを回避する方法はありますか?
assembly - x86 オペコードのエンコードにおける方向/符号拡張ビット
x86 命令セットでは、オペコードのインデックス 1 のビットは、デスティネーション オペランドとソース オペランドを指定する方向ビットか、符号拡張ビットのいずれかです。
例えばadd
00 /r ADD r/m8, r8
vsそのビットは、同じニーモニックの vs. を区別02 /r ADD r8, r/m8
しますr/m, reg
reg, r/m
81 /0 id ADD r/m32, imm32
対83 /0 ib ADD r/m32, imm8
フル (ビット 1 クリア) 対符号拡張即値 (ビット 1 セット)
これらのケースのどれであるかを判断する最も簡単な論理的な方法は何だろうと思っています。命令オペコードをチェックし、それらを比較してそれがどれであるかを確認する以外にチェックする方法はありますか (命令の符号拡張または方向ビット バリアントの場合)。このビットを無視する命令もありますが、0 に設定されているので問題ありません。
編集: 書き込みエラー (私のコードが意図したもの) の場合、ar/m->reg 命令は決して書き込みエラーをトリガーしないため、reg->r/m が常に当てはまることがわかります。しかし、他の誰かが同様の問題に遭遇した場合に備えて、どんな情報でもいいでしょう.
assembly - オペコードから命令のオペランドの数を見つける
私は自分の小さな逆アセンブラを書くことを計画しています。実行可能ファイルを読み取ったときに取得したオペコードをデコードしたい。次のオペコードが表示されます。
以下に対応する必要があります。
現在、「imul」命令は 2 つまたは 3 つのオペランドを持つことができます。そこにあるオペコードからこれをどのように理解するのですか?
Intel の i386 命令セットに基づいています。