1

マシン命令の短いセット (160 バイト) がありますが、それが何をするのかわかりません。

私はMacを使用しており、GDB逆アセンブラーで実行したところ、次のようになりました。

....f3c0:   jmp    0x7fff5fbff3c6
....f3c2:   scas   %es:(%rdi),%eax
....f3c3:   retq   $0xa3bf
....f3c6:   sub    $0x100,%esp
....f3cc:   xor    %ecx,%ecx
....f3ce:   mov    %cl,(%rsp,%rcx,1)
 + 50 more lines....

私はアセンブラをほとんど知りませんが、いくつかのコマンドはおかしく見えました ( のようにrex.RXB, rex.WB, rex.B)。それで、少しグーグルした後、DOS実行可能ファイルであると私に言った次のコマンドを見つけました:

   $ file program
   program: DOS executable (COM)
  • DOS 実行可能ファイルを逆アセンブルできるプログラムはありますか?

そうでない場合は、160 バイトしかないため、手動で逆アセンブルしようとします。ただし、各バイトの意味の参照が必要になります。例えば

90 = NOP
8a = MOV
....
  • DOS マシン コード命令について、このようなリファレンスはありますか?

  • プログラムが何をするかを知るには、他にどのような方法がありますか?


アップデート:

IGOR からのすばらしい提案の後、別のプログラムを使用してコードを逆アセンブルしました。ただし、まだいくつかの悪い指示があります。

 e:  88 0c                  mov    BYTE PTR [si],cl
10:  0c fe                  or     al,0xfe
12:  c1                     (bad)  
13:  75 f9                  jne    0xe
......
......
96:  90                     nop
97:  e8 9d ff               call   0x37
9a:  ff                     (bad)  
9b:  ff 41 41               inc    WORD PTR [bx+di+0x41]
  • なぜそれが言うの(bad)ですか?
4

4 に答える 4

3

COM ファイルの場合は、生のリアル モード x86 コードです。objdump に 8086 モードを使用するように指示できます。例:

objdump -b binary -D -m i8086 file.com

Intel スタイルのニーモニック (ほとんどの Intel および DOS ドキュメントで使用) を表示するには、" -M intel" を追加します。

命令リファレンスについては、これまたはこれを試してください。

于 2011-12-05T12:49:24.023 に答える
2

DOS デバッガーを介して DOS マシンで実行できます。ただし、それに対する防御を念頭に置いて構築されている場合は、非常に不可解かもしれません.

于 2011-12-05T12:09:08.473 に答える
1

勇気のある方は、 DOSBoxをインストールして実行してみてください。

于 2011-12-05T12:12:08.973 に答える
1

表示されるものすべてが命令であると想定しないでください。それは単なるデータであり、実際の命令のように見えるその前の命令は単なるデータである可能性があります。可変語長命令セットなので逆アセンブルがとにかく難しい。シミュレーションが最も簡単な方法である場合もあれば、2 つの組み合わせである場合もあります。きれいな分解ができるまで分析を開始するのを待たずに、ツールを簡単に入手して掘り下げることができる限り、いくつかの異なる分解を行います。いずれにせよ、手動で行う必要があるかもしれません。それは指示のための獣の性質です.このようなセット。

dos 呼び出しをサポートする 8086/88 用のエミュレーターを検索するには、pcemu をグーグルで検索します。そうでない場合は、独自の逆アセンブラを実行する必要があります。

このコードが元々アセンブラ以外で書かれている場合、特にアセンブリ言語を知らない場合は、従うのが難しいかもしれません。アセンブリの学習演習としてこれを行っている場合は、他にも多くのより良い学習方法があります。命令セットの逆アセンブラー (またはエミュレーター) を作成することは、命令セットを学習するための優れた方法ですが、可変語長命令は高度ですが、命令を見つけるためにメモリを直線的にではなく実行順序で移動する必要があり、後で実行する必要があるためです。検出したものを命令として分解し、残りのデータを残します。msp430 のようなもっと単純なものに足を踏み入れてから、x86 のような痛みを伴うものを攻撃する方がよいかもしれません。

于 2011-12-05T23:32:41.143 に答える