8

専門家、インテルx86のmachineCode / assemblyCode変換はsingleSideまたはbothSideですか?

つまり、assemblyCode--->machineCodeとmachineCode--->assemblyCodeの両方が使用可能です。

x86のmachineCodeはサイズ(1〜15バイト)が異なり、オペコードは(1〜3バイト)が異なるため、1つのオペコードが1バイトまたは2バイトまたは3バイトであるかどうかを判断する方法は?

x86命令のプレフィックスの例は見つかりませんでした。ここに1バイトのプレフィックスがある場合、プレフィックスまたはオペコードであるかどうかを判断する方法は?

確かに、assemblyCode ---> machineCode、ニーモニック+ oprand [w / b]のIDは、特定のMappingTableをマップすることにより、応答machineCodeが何であるかを判別できます。

ただし、プロセスが逆の場合:

{bbbbbbbb、bbbbbbbb、bbbbbbbb、//命令1 bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、//命令2 bbbbbbbb、bbbbbbbb//命令3}

----> {bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb、bbbbbbbb}

1つの命令の長さ(サイズ)を決定するための重要なビットまたはバイトがどれであるかわかりません。

誰かがそれを決定する方法を教えてくれますか?(オペコードのサイズ、プレフィックスの例)助けてくれてありがとう。

4

3 に答える 3

3

何を達成したいかはわかりませんが、命令の長さは可変であるため、正しく逆アセンブルされたコードを確実に取得する唯一の方法は、既知の開始アドレスから開始することです。通常、逆アセンブラはプログラムの開始点から開始し、呼び出されたすべてのメソッドを再帰的に逆アセンブルします。

ただし、これにより、一部のコードチャンクが関数テーブルから呼び出すことができるために分解されない状況などが発生するため、通常、残りのセクションがコードかデータかを確認するには、人間の助けが必要です。

于 2010-03-09T14:25:22.310 に答える
3

必要な詳細は、インテル®64およびIA-32アーキテクチャーソフトウェア開発者用マニュアル第2巻B:命令セット・リファレンス、ニュージーランドにあります。付録Aを見てください。必要なものがすべて含まれています。

于 2010-03-09T14:29:17.547 に答える
2

x86のmachineCodeはサイズ(1〜15バイト)が異なり、オペコードは(1〜3バイト)が異なるため、1つのオペコードが1バイトまたは2バイトまたは3バイトであるかどうかを判断するにはどうすればよいですか?

指示されたサイズは、命令モードとアドレスモードによって暗黙的に定義されます。ISAを一度に1バイトずつチェックして、そのバイトに続くことができるものと従う必要があるものを確認する必要があります。

x86命令のプレフィックスの例は見つかりませんでした。ここに1バイトのプレフィックスがある場合、プレフィックスまたはオペコードであるかどうかを判断する方法は?

たとえば、オペランドサイズオーバーライドプレフィックス(66h)は常にプレフィックスです。

于 2010-03-09T14:25:24.100 に答える