изменение размера статического массива в программе

Тема в разделе "WASM.RESEARCH", создана пользователем naquad, 17 июл 2009.

  1. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    разбираюсь с hiew 7.10. погряз в мануалах по PE, hiew и ассемблеру:dntknw:

    align 200h
    .data - последняя в дизассемблированом коде IDA

    пока разбираюсь с hiew, потом ещё позадаю глупых вопросов :)
     
  2. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Не вериццо :derisive: Ты флажок "load resources" установил при открытии? Хотя такое тоже иногда бывает.

    200h - "многовероятно" должно хватить.
     
  3. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    программа консольная, ресурсов там я вобще не нашёл (всякие диалоги, иконки, etc...), а строки живут в .rdata

    конец выглядит так:

    Код (Text):
    1. _data           ends
    2.                    end start
    я сейчас изобразил финт ушами: увеличил VirtualSize секции .data на 0xB00.
    насколько я понял из мануалов это означает, что память можно будет использовать на read/write (согласно флагам секции), а загрузчик под несуществующий кусок
    выделит память, забитую нулями. таким образом 0xB00=702 элемента по 4 байта :) хотя почему не больше я так и не понял.
    осталась последняя трабла - заменить все вхождения, а с hiew я никак не могу подружиться >_<
     
  4. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    *704 промахнулся :)
     
  5. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Недооценил. Понял вначале что раз есть серьезная функц-ность... то вероятно есть и .rsrc

    Т.е. выглядит это примерно так:

    Код (Text):
    1. .code
    2. <?>
    3. .rdata ; Инициализированные данные - строки и т.п.
    4. .data ; Тут только НЕинициализированные данные? И она имеет PhysicalSize=0, VSize > 0 ?
    5.   <SomeVars1>
    6.   YourArrayOfSockets
    7.   <SomeVars2>
    Как править в HIEW. Я знал только мануальный способ. Сначала переходишь в режим редактирования (F2 or F4 or F3), затем пишешь - всплывает окно редактирования строки... Или нет, не так. По дефолту ты видешь hexbytes, тогда переключаешь его в режим дизасма и уже там редакция.

    Наверное тебе нужно будет как-то искать места ссылок в hiew, которые ты нашел в .IDA. Там вроде есть функция перехода на нужную позицию в файле (F5?) или поиска (F7?).

    Если ссылок >10 - это точно тема пейсать прогу. Сначала в .IDA переименовываешь массив и [разными путями] собираешь адреса...

    :)
     
  6. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    вобще .data имеет несколько инициализированных переменных, но сути это не меняет.

    hiew поиск умеет только ascii и hex, а это не мой случай :dntknw:
    попытка взять .idb с набегу не удалась. пытаюсь найти спецификацию формата, но пока не нашёл.
     
  7. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    hiew умеет искать и по коду и по маске кода
     
  8. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    dag, я перекопал весь help и в упор не вижу :dntknw: подскажи пожалуйста как?
     
  9. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    naquad

    А зачем тебе искать в HIEW? Ты нашел инструкцию в IDA, она тебе кажет Virtual & Physical address. Просто найди это же место в HIEW (F5?)

    ps Лично мне хэлп в HIEW кажется продвинутым - просто смотришь клавишей описание в нижней линии, также зажимая SHIFT и ALT и CTRL.
     
  10. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    и так 400+ раз? :) это будет задача на год :)
    сейчас решил сделать по-другому: в IDA: File -> Produce file -> Produce LST file.
    вывалило голый ассемблерный листинг as is.
    сейчас думаю написать программулину, которая будет читать .lst и если в какой-то инструкции будет встречаться искомый dword_43D4CC, то читать следующую инструкцию,
    вычислять длину инструкции, затем читать этот кусок из файла .exe выискивать там (я пока умней плавающего окна с DWORD ничего не придумал) искомый адрес и заменять его на новый.
    но как-то очень зло получается =\
     
  11. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    naquad посмотри есть ли в программе relocation table/ задачу можно сильно упростить при её наличии.
     
  12. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    чтоб я ещё знал как... пошёл грызть мануалы.
     
  13. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    кажись нету :dntknw:
     
  14. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    программулина таки подсобила, на первый взгляд всё заменено. продолжаю беготню, т.к. кажись кол-во соккетов отправляемые в select где-то ограничены
     
  15. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    стандартные настройки: F4->Decode F7->F7
     
  16. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    таки да есть такое, вот только на enter в search & replace начинает сразу search и не даёт воткнуть replace :dntknw:
     
  17. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    кстати помочь оно ничем не может, т.к. чтоб искать 0043D4CC приходиться лупить *0043D4CC* иначе говорит: "Illegal instruction" - при такой замене улетит всё инструкция, а не 1 операнд, так что hiew в данном случае не то, хотя хотелось бы конечно без написания вагона своего софта.
     
  18. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Поэтому я сразу предложил пейсать микропрогу на asm/C (размером в экран наверное) или посмотреть в сторону:

    - Экспорта листинга из IDA с последующей возможности компилляции в EXE. В этом случае задача сводится к редактированию исходника;
    - Не уверен но вроде бы МОЖНО как-то модифицировать исходный файл в IDA. В этом случае скрипт* поможет;
    - Рассмотреть перенос данных которые ПОСЛЕ злополучного массива (если на них гораздо меньше ссылок), а сам массив просто gets expanded down.

    *Но чем он лучше своей проги - я не могу сказать.
     
  19. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    ps Прога достаточно элементарна, могу опейсать алгоритм если нужно. Протокол проги поможет проверить результаты ее действия.
     
  20. naquad

    naquad New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    20
    я уже всё перенёс вышеописанной программулиной, сработала на ура. рекомпиляция exe невозможно - несколько немаленьких кусков ida не смог дизассемблировать (корректно).
    сейчас я наступил на другие грабли: клиенты > 6 не обрабатываются вообще, где-то стоит лимит на кол-во соккетов, передаваемых в select. вот его я щас и ищу.