2013-07-18 4 views
1

Я хотел бы изменить первую команду и изменить его на jmp 100h (давать или принимать несколько байт) mov edi,edi занимает 2 байта и jmp 100h занимает 5 байт (правильно me if im wrong)Binary заплат - существующие инструкции необходимости модифицировать и держать машинный код выравнивания

Я редактирую машинный код до jmp 100h и добавляю 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

Похоже, что это работает, но дизассемблер не интерпретирует данные в качестве инструкций. Вероятно, это связано с предыдущей инструкцией jmp - дизассемблер видит, что код сразу после него никогда не будет достигнут, поэтому он предполагает, что он не является кодом (и таким образом интерпретирует его как прямые данные).

+0

'90h' является' nop', а '89h, 0FFh' является' mov edi, edi', так что да, он работал правильно. –