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

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

  1. alexparser

    alexparser New Member

    Публикаций:
    0
    Всем привет!

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

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

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

    Спасибо!
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    alexparser
    Снова пиши в комерс, иначе ничего не будет. Запуск из памяти походу нужен.
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    преобразовать файл в массив данных, или прицепить в ресурсы
     
  4. Asterix

    Asterix New Member

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

    alexparser New Member

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

    alexparser New Member

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

    Clerk Забанен

    Публикаций:
    0
    include директива вкомпилит бинарник, который будет сделан тулзой BlackParrot'a к примеру(я юзаю).
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    alexparser
    #4
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    можно еще сконвертить бинарь в массив байтов
     
  10. alexparser

    alexparser New Member

    Публикаций:
    0
    Как определить начало бинарника и его размер?
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Разность адресов конца и начала массива.
     
  12. Asterix

    Asterix New Member

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

    Clerk Забанен

    Публикаций:
    0
    Asterix
    В пакете масма есть тулза BinToDb, её достаточно.
     
  14. qqwe

    qqwe New Member

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


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

    Asterix New Member

    Публикаций:
    0
    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
    Asterix
    Длина строки не имеет значения. Всё компилится.
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    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
    Clerk
    ок, заинклудь и скомпили не меняя ничего в файле
     
  19. Asterix

    Asterix New Member

    Публикаций:
    0
    qqwe
    хотите поразить нас своим кодом?

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

    qqwe New Member

    Публикаций:
    0
    Asterix
    в самое сердце! впрочем, лучше так

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

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