2013-07-18 21 views
1

我想編輯的第一個指令並將其更改爲jmp 100h(給予或採取幾個字節) 的mov edi,edi需要2個字節,jmp 100h需要5個字節(正確我如果我錯了)二進制補丁 - 對矯正現有的指令,並保持機器代碼比對

我編輯機器碼爲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',所以是的,它的工作正常。 –