[masm] Как вкомпилить файл?

Тема в разделе "WASM.ASSEMBLER", создана пользователем alexparser, 6 фев 2010.

  1. alexparser

    alexparser New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    31
    Всем привет!

    Нужно сделать такую задачку, как контроль запуска исполняемых файлов.
    Я наметил два пути:
    1. Инжект моего окда в *.ехе
    2. Инкапсуляция чужого кода в мой

    Для первого варианта нашел пример, но он не рабочай, бъет РЕ (http://vxheavens.com/lib/vbp00.html) и решил с этим не париться
    Второй вариант гораздо проще - вкомпилировать в мою аппу другую апапу, потом выгрузить ее в мэп и запустить.

    Вопрос - как заставить MASM вкомпилить в секцию данных ехе-шник и отследить его начало и размер внутри секции данных?

    Спасибо!
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    alexparser
    Снова пиши в комерс, иначе ничего не будет. Запуск из памяти походу нужен.
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    преобразовать файл в массив данных, или прицепить в ресурсы
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    в фасме это делается просто и элегантно директивой file
     
  5. alexparser

    alexparser New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    31
    Как закинуть в ресурсы понятно, а вот как вкомпилить как дата-файл - вот это мне и нужно.
     
  6. alexparser

    alexparser New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    31
    "Снова пиши в комерс" - ???
    апуск из памяти походу нужен - естественно
    вопрос был в том - как файл вкомпилить!?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    include директива вкомпилит бинарник, который будет сделан тулзой BlackParrot'a к примеру(я юзаю).
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    alexparser
    #4
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    можно еще сконвертить бинарь в массив байтов
     
  10. alexparser

    alexparser New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    31
    Как определить начало бинарника и его размер?
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Разность адресов конца и начала массива.
     
  12. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    утилита eff из пакета ufmod умеет конвертить любые бинари в массивы нескольких форматов,
    в том числе С, masm, delphi
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Asterix
    В пакете масма есть тулза BinToDb, её достаточно.
     
  14. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    for(char* p = binBegin; p < binBegin + binLen; p++)
    printf(" 0x%.2X,", *p); // конкретный формат зависит от цели


    ?
    а как запускать из памяти пе-шку планируете? (это к ТС)
     
  15. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    qqwe
    например в масм массив должен состоять из строк определенной длины, иначе не компилит
    типа такого
    Код (Text):
    1. db  010h, 000h, 000h, 000h, 001h, 000h, 001h, 000h, 022h, 056h, 000h, 000h, 022h, 056h, 000h, 000h
    2.       db  001h, 000h, 008h, 000h, 064h, 061h, 074h, 061h, 086h, 09Dh, 000h, 000h, 080h, 080h, 080h, 080h
    3.       db  080h, 080h, 080h, 080h, 081h, 085h, 090h, 097h, 08Dh, 075h, 066h, 070h, 080h, 082h, 07Fh, 07Fh
    так что алгоритм слегка придется усложнить ;)
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Asterix
    Длина строки не имеет значения. Всё компилится.
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Asterix
    for(char* p = binBegin; p < binBegin + binLen; p++)
       printf(
    (p - binBegin) % MAX_IN_LINE ?
    ", 0x%.2X" :
    "\n\tdb 0x%.2X",
    *p);   // конкретный формат зависит от цели


    курсы суперхэцккеров 5тый час. ходите на курсы суперхэцккеров! там вас научат правильно цвиркать ротом!

    (к ТС) главное решено. остались мелочи - запуск из памяти пе-бин-образа. ну, тут вы и сами одной левой
     
  18. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Clerk
    ок, заинклудь и скомпили не меняя ничего в файле
     
  19. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    qqwe
    хотите поразить нас своим кодом?

    об этом написано на сайте в статье, если не ошибаюсь
     
  20. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Asterix
    в самое сердце! впрочем, лучше так

    for(char* p = 0; printf(p % MAX_IN_LINE ? ", 0x%.2X" : "\n\tdb 0x%.2X", *(char*)(p + binBegin)) && p < binLen; p++);

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