2010-10-19 5 views
1

работает на Windows 7, 32bit домой проадреса в нажимной инструкции изменения после изменения еха в шестнадцатеричном

Я создал очень простые несколько приложений линии в Visual Studio 2008, составитель и связан со стандартными библиотеками в режиме выпуска в исполняемый тест .Exe.

Код в C выглядит следующим образом:

char* test = "h"; 
int main() 
{ 
    _asm 
    { 
     push 0xFEEDBACC; 
    } 
    MessageBoxA(0,test,test,0); 
} 

, который приводит к следующему машинного кода и соответствующего узла, как показано на VS2008 (адреса нормированный ниже нормального запуска виртуальный адрес 0x4001000)

char* test = "h"; 
int main() 
{ 
    _asm 
    { 
     push 0xFEEDBACC; 
00261000 68 CC BA ED FE push  0FEEDBACCh 
    } 
    MessageBoxA(0,test,test,0); 
00261005 6A 00   push  0  
00261007 68 F4 20 26 00 push  offset string "h" (2620F4h) 
0026100C 68 F4 20 26 00 push  offset string "h" (2620F4h) 
00261011 6A 00   push  0  
00261013 FF 15 A4 20 26 00 call  dword ptr [[email protected] (2620A4h)] 
} 

Теперь вместо вызова MessageBox я хочу вместо этого нажать другую строку «h» сразу после нажатия 0, поэтому с помощью hexedit я ищу раздел, содержащий FF15A420 ... и перезапишу его, чтобы стать

90 68 CC BA ED FE 

Теперь, если я открываю исполняемый файл в IDA бесплатно я вижу следующее в моей секции .text:

.text:00401000     push 0FEEDBACCh 
.text:00401005     push 0 
.text:00401007     push offset unk_4020F4 
.text:0040100C     push offset unk_4020F4 
.text:00401011     push 0FFFFFF90h 
.text:00401013     nop 
.text:00401014     push 0FEEDBACCh 
.text:00401019     retn 

это выглядит хорошо до сих пор, я вижу в 0x401014 моего нового толчка заявлении.

Теперь, если я отладки ехе в IDA бесплатно вдруг я вижу, что мои изменения кода (см ниже) толчок 0FEEDBACC становится толчок 0FFA4BACC, и я не могу понять, почему первые 2 байта изменяются.

.text:00F71000 push 0FEEDBACCh 
.text:00F71005 push 0 
.text:00F71007 push offset unk_F720F4 
.text:00F7100C push offset unk_F720F4 
.text:00F71011 push 0FFFFFF90h 
.text:00F71013 nop 
.text:00F71014 push 0FFA4BACCh // im puzzled! 

Может ли кто-нибудь объяснить, что здесь происходит, и почему число, которое я нажимаю, изменяется? Я попытался изменить начальный физический байт этого адреса (подозревая какую-то проблему выравнивания), но он, похоже, не изменил ситуацию.

Спасибо,

skimon

+1

Ну, это трудный способ узнать, что означает перемещение. Ссылка: http://en.wikipedia.org/wiki/Relocation_%28computer_science%29 –

+0

@ Ханс: Я держал пари, что скимон узнал это хорошо, тхо. :) –

ответ

3

Изображение база тоже изменилась между последними двумя экранами.

Я думаю, что он только что переехал (там раньше было адрес): DWord на 0x15: A4 20 26 00 указывает на IAT, так что после перемещения его высокое слово (байт 0x17 0x18) будет изменен путем добавления

0x00F7 - 0x0040 = 0x00B7.

Попробуйте отключить рандомизацию изображения (или просто удалить перемещение).

+0

Я вижу, что если бы я перезаписал инструкции push перед ним (поскольку они не включают перемещенные функции), то мои инструкции были бы в порядке. И я просто проверил, что работает. Я также посмотрю, как удалить перемещение. Спасибо за вашу помощь. – skimon