1

最初の命令を編集して、2 バイトと5 バイトをjmp 100h取るように変更します (間違っている場合は修正してください)。mov edi,edijmp 100h

マシン コードを編集し、jmp 100ha を追加しnopて 6 バイトに丸めます。

.text:08048DD5                 mov     edi, edi
.text:08048DD7                 mov     edi, edi
.text:08048DD9                 mov     edi, edi
.text:08048DDB                 mov     edi, edi
.text:08048DDD                 mov     edi, edi
.text:08048DDF                 mov     edi, edi
.text:08048DE1                 mov     edi, edi
.text:08048DE3                 mov     edi, edi
.text:08048DE5                 add     [ebp+var_C], 1  ; Add
.text:08048DE9                 mov     eax, offset format ; "Message %d: %s"
.text:08048DEE                 lea     edx, [ebp+s]    ; Load Effective Address
.text:08048DF4                 mov     [esp+8], edx

結果は次のようになります。

.text:08048DD5                 jmp     loc_8048D41
.text:08048DD5 ; ---------------------------------------------------------------------------
.text:08048DDA                 db 90h
.text:08048DDB                 db 89h, 0FFh
.text:08048DDD                 db 89h, 0FFh
.text:08048DDF                 db 89h, 0FFh
.text:08048DE1                 db 89h, 0FFh
.text:08048DE3                 db 89h, 0FFh
.text:08048DE5 ; ---------------------------------------------------------------------------
.text:08048DE5                 add     [ebp+var_C], 1
.text:08048DE9                 mov     eax, offset aMessageDS ; "Message %d: %s"
.text:08048DEE                 lea     edx, [ebp+s]
.text:08048DF4                 mov     [esp+8], edx
.text:08048DF8                 mov     edx, [ebp+var_C]

ここで何がうまくいかないのですか?残りのコードをそのまま維持するにはどうすればよいですか?

4

1 に答える 1

4

動作しているように見えますが、逆アセンブラーはデータを命令として解釈していません。これはおそらく前のjmp命令によるものです。逆アセンブラーは、その直後のコードに決して到達しないことを認識しているため、実際にはコードではないと想定します (したがって、それをストレート データとして解釈します)。

于 2013-07-18T13:58:50.920 に答える