Есть различая в исполняемых модулях. Подскажите что делать

Тема в разделе "WASM.BEGINNERS", создана пользователем ajak, 11 апр 2010.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Привет всем.
    В общем есть проект созданный в Dev-C++. Причём с ошибками, чтобы ламеры не смогли собрать. Я его правильно изменил и собрал с использованием того компилятора который идёт вместе с Dev-C++. Также есть уже готовый exe модуль собраный тамже. Я сравнил их и они отличаются. Также программа скомпиленная мной чуть не правильно работает. Загрузил поочереди всё в Ida pro. Сравнил. Нашел комманды на асме которые отличаются. Подскажите как теперь мне выяснить по какому смещению они нах-ся, ведь она показывает уже ассемблерный код а дамп exe файла не показывает.
    А мне нужны байты в хексе, чтобы видеть что подправить у себя в исходном коде на си. Может я что-то неправиально объяснил, ну вдруг кто-то поймёт. :_)
    В общем хочу изменить ьеперь код на си так чтобы работала прога как в готовом моделу который не я собрал а уже был откомпилен. Спасибо.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Я не очень понял ситуацию и сильно не уверен, что изменение байтов в программе может помочь, но как поменять байты скажу:

    1. Берем виртуальный адрес байтов, вычитаем базовый адрес исполняемого.
    2. Из получившегося RVA вычитаем виртуальный адрес секции.
    3. К получишемуся смещению прибавляем смещение секции в файле.

    Когда проделывать все это руками надоедает, правим файл в Olly, затем из всплывающего меню 'Copy to executable' ->'All modifications', в открывшемся окне снова в меню выбираем 'save file'.
     
  3. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Да, надо попоробовать в ольке.
    В общем хочу понять чем отличается мой исходник от того что был и изменить код на си , а то как будто несколько строк на си убрано отвечающие за правильную прорисовку
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Способ 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-файла.
     
  5. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    сделать дифф сорцов исходных и сорцов ваших. и посмотреть среди где вы меняли - где вы меняли зря.

    если вы юзали любой вариант свн, шг, бзр, то сделать это можно соотв командой. нет - ищите диффер. они идут как утиль линя, в тулзах к студии, к любому норм тулчейну итд