5

現在、逆アセンブラを作成しようとしています。次のオペコードとその意味のリストを見つけたので、実行時に解析することにしました

しかし、私はオペコード 0x00 で立ち往生しています。その後に reg/modbyte が続きます。それを解析することは、私にとってそれほど問題ではありませんでした。

しかし、Scale-Index-Base バイトに問題があり
ます。実際に esp をインデックス レジスタとして指定すると、実際にはインデックス レジスタがないことを意味します。

同じことが、ebp を使用したベース レジスタにも当てはまります。しかし、私はC++インラインアセンブラで試しました:コンパイルすることは可能です: add [ebp*2+ebp],cl

では、ebp をベース レジスタとして使用することが実際にはベース レジスタをまったく使用しないことを意味する場合、どうすれば ebp をベース レジスタとして使用できますか!?

4

1 に答える 1

9

「MissingEBP」の場合は、ModR/M.Modフィールドの値が00バイナリの場合にのみ適用されます。EBPをベースとして必要な場合、アセンブラはModを01バイナリに変更し、値がゼロの8ビット変位を追加します。

004C6D00 add [ebp + ebp * 2]、cl

于 2010-08-13T12:08:35.330 に答える