Всем привет, вопрос такой: Как пропатчить бинарик с такого простенького исходника: #include <stdio.h> main() { printf("First message\n"); printf("Second message\n"); } Собрали, отдизасмили Получили адреса двух printf'ов 004012DC и 004012E9...Как пропатчить экзешник этот, чтобы прога доходила до 004012DC(первого printf) и не делала call _printf, а заменить на jmp 004012E9 тоесть сразу прыгала на выполнение второй функции. Открываю в WinHex'e экзешник, а что дальше искать???как патчить???Адреса что-то не те вообще???Помогите разобраться новичку.
Надо из адресов, что в дизасме, вычесть image base. 004012DC-00400000=000012DC И в интервале от 12DC до 12E8 забить байт 90
насколько я понял, то байты по смещениям 12DC-12E1 нужно заменить на 0x90, тогда проскипается первое сообщение, и сразу выведется второе, и стек не порушится
Открыл в winhex'e бинарик(как на скрине выше привел), но не могу найти 000012DC(с вычетом imagebase'a)???Как найти этот адрес?
Меню Position/Go To Offset... Чтобы увидеть шетнадцатиричное представление в меню View убрать галочку Text Display Only
так нашли 12DC Переставил другой winhex, а в прежнем не было даже меню Position. Теперь такой вопрос: Нопить мне не нужно (почему кстати по 12Е1) мне нужно заменить на "JMP 004012E9"(адрес второй ф-ции)..другими словами в hex редакторе открыв бинарик и найдя смещение 12DC заменить опкодами на команду "JMP любой адрес" сохранить изменения и запустив файл увидеть только один printf в выводе(так как первый мы заменим на безусловный переход).
На сколько я понимаю это опкоды 68 E4 12 40 00 C3 где можно с ними более детально ознакомиться и почему начиная с 004012D7, если не jmp то что тогда, просто для себя хочу разбираться а не тупо поросил - подсказали...если можно немного подробней
68 - push E4 12 40 00 - адрес перехода C3 - retn Список опкодов http://wasm.ru/baixado.php?mode=doc&id=129 Начиная с 004012D7 потому что левая пятка так пожелала