работает на 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
Ну, это трудный способ узнать, что означает перемещение. Ссылка: http://en.wikipedia.org/wiki/Relocation_%28computer_science%29 –
@ Ханс: Я держал пари, что скимон узнал это хорошо, тхо. :) –