Базонезависимость на C(C++)

Тема в разделе "WASM.BEGINNERS", создана пользователем AksakaL, 6 фев 2007.

  1. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    Возможно ли создание базонезависимого кода на C/C++ (например внедрение части кода в другой исполняемый файл)
    На асме-то ноу проблем, а вот на ЯВУ....

    Ссылки с кодом на УРА!

    З.Ы.
    Заранее спасибо
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    возможно, но слишком геморно, увеличивает размер кода..
     
  3. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    2 FreeMan
    Да мне на геморой пофигу (когда писал вирус на асме гемороя тоже не мало,так может гемороя на С с переносимостью меньше будет чем все на асме колбасить)

    Ты по-подробнее, ссылочку кинь или еще чего-нить ;))
     
  4. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    ты хочешь внедряться в процесс или в файл на диске ?
     
  5. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    Щас,сформулирую конкретнее!

    Мне необходимо например часть своего кода с процедурами внедрить в процесс,потом исполниться в нем (как реализуется на асме - знаю,делал) . Мы заранее не знаем по какому аресу будем распологаться поэтому используем относительную адресацию.Так вот,как реализуется относительный вызов процедур на С/С++
     
  6. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    можешь на асме исходник выложить ? а на Си я и сам ищю как это сделаеться. если найдёшь вылоиж тоже пожалуйста.
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    я не большой знаток си. есть пара идей но это сверх тупо. есле хоч, постучи в асю попробую объяснить
     
  8. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    Лови (только там 1300 строк и я на твоем месте бы забил,почитай статьи на wasm там все есть)

    FreeMan ну куда же ты делся ! сказал можно но хоть примерчик дай ^_^
     
  9. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    теоретически :) у меня нет кода
     
  10. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    AksakaL
    Жуть:) Зачем на каждом шагу dword ptr и offset втыкать?

    А по поводу сабжа тоже хотел бы просветлиться.

    p.s. Народ, а никто не писал что-нибудь вроде invoke, только чтобы с базонезависимым кодом использовать можно было?
     
  11. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    тогда проще всего генерить бинарник с фиксапами проинжектить его полностью (по любому адрессу), после чего обработать их (пример на форуме уже выкладывался, юзай поиск)
    а базонезависимый код на c/cpp - имхо, уж очень гемморно да и хз всегда возможно ли
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    это, наверное, самый легкий вариант...
     
  13. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    А это чтоб потом каждый раз под отладчиком не лазить и смотреть а не пихнул ли я по ошибке абсолютный адресок или наоборот смещение вместо значения (зато когда потом разгребаешь все понятно : где значение где смещение)-это раз (+ базонезависимость - это 2)

    Коммент к исходнику
     
  14. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Ну это дело привычки видать:)

    Не понял, а ка это базонезависимости помогает?
     
  15. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    Не!Как же базонезависимость без offseta?
     
  16. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    push dword ptr [ecx+(offset PROC2_ADDR)] == push PROC2_ADDR[ecx]
    зачем лишние буквы?
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    WIN32
    В чем сложности базо-независимого вызова?

    1. Ищем дельта смещения - это разница между текущим расположением какой либо части кода и тем адресом который предположил компиллер
    2. Добавляй к значению вызова эту дельту
    3. ВСЕ )
     
  18. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    А вообще, есть поиск по форуму. Из результатов поиска можно увидеть слова Dr.Golova, что функция написанная только с локальными и только с ними уже базо-независима )
     
  19. AksakaL

    AksakaL New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    18
    Хмм че ето у тя написано?В Masme точно не переваривается

    (Мне не совсем понятно Proc2_ADDR[ecx]-что делается этой командой?)
     
  20. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    В масме это переваривается. А этой командой заталкивается в стек значение Proc2_ADDR. Компилятор сгенерирует такой код push [ecx+xxxxxx]

    p.s. какой топик оживлённый:) Не успеешь слово сказать, тебе уже 2 скажут.