Привет всем. В общем есть проект созданный в Dev-C++. Причём с ошибками, чтобы ламеры не смогли собрать. Я его правильно изменил и собрал с использованием того компилятора который идёт вместе с Dev-C++. Также есть уже готовый exe модуль собраный тамже. Я сравнил их и они отличаются. Также программа скомпиленная мной чуть не правильно работает. Загрузил поочереди всё в Ida pro. Сравнил. Нашел комманды на асме которые отличаются. Подскажите как теперь мне выяснить по какому смещению они нах-ся, ведь она показывает уже ассемблерный код а дамп exe файла не показывает. А мне нужны байты в хексе, чтобы видеть что подправить у себя в исходном коде на си. Может я что-то неправиально объяснил, ну вдруг кто-то поймёт. :_) В общем хочу изменить ьеперь код на си так чтобы работала прога как в готовом моделу который не я собрал а уже был откомпилен. Спасибо.
Я не очень понял ситуацию и сильно не уверен, что изменение байтов в программе может помочь, но как поменять байты скажу: 1. Берем виртуальный адрес байтов, вычитаем базовый адрес исполняемого. 2. Из получившегося RVA вычитаем виртуальный адрес секции. 3. К получишемуся смещению прибавляем смещение секции в файле. Когда проделывать все это руками надоедает, правим файл в Olly, затем из всплывающего меню 'Copy to executable' ->'All modifications', в открывшемся окне снова в меню выбираем 'save file'.
Да, надо попоробовать в ольке. В общем хочу понять чем отличается мой исходник от того что был и изменить код на си , а то как будто несколько строк на си убрано отвечающие за правильную прорисовку
Способ 1. Убедиться, что в idagui.cfg/idatui.cfg параметр DISPLAY_PATCH_SUBMENU выставлен в YES. В диалоге Edit -> Patch program -> Change byte... IDA показывает смещения в оригинальном файле. Способ 2 (аналог поста #2, не требующий выхода из IDA). Изменить нужные байты в IDA и создать файл DIF (File -> Produce file -> DIF file). Менять байты можно массово с помощью скриптов; например, для задачи "перетащить N байт из одной базы IDA в другую" скрипт "auto f;f=fopen("tmp","wb");savefile(f,0,here,0x1000);fclose(f);", выполненной в одной базе, сохранит в файл tmp 0x1000 байт, начиная с текущей позиции курсора, а далее "auto f,i;f=fopen("tmp","rb");for(i=0;i<0x1000;i++)PatchByte(here+i,fgetc(f));fclose(f);" в другой базе загружает файл tmp и правит 0x1000 байт с возможностью последующего создания dif-файла.
сделать дифф сорцов исходных и сорцов ваших. и посмотреть среди где вы меняли - где вы меняли зря. если вы юзали любой вариант свн, шг, бзр, то сделать это можно соотв командой. нет - ищите диффер. они идут как утиль линя, в тулзах к студии, к любому норм тулчейну итд