Получить доступ к указателю из функции =)

Тема в разделе "WASM.BEGINNERS", создана пользователем featurelles, 13 авг 2009.

  1. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Столкнулся с проблемой)
    Есть некая функция unsigned int test ( arg_1, arg_2, arg_3, arg_4 ) (функция ядра)
    И есть указатель на некие структуры struct_ptr
    Нету возможности передать указатель struct_ptr в функцию напрямую, но есть возможность модифицировать тело функции
    test ( arg_1, arg_2, arg_3, arg_4 )
    {
    Вот тут, могу писать всё что угодно.
    }


    Мне нужно получить указатель struct_ptr внутри функции test ( arg_1, arg_2, arg_3, arg_4 ). Как это можно правильно сделать? )
     
  2. icent

    icent New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2009
    Сообщения:
    154
    Очень расплывчато проблему описал..%) Смотря какие там параметры, где исполняется код и вообще, поподробнее опиши.
     
  3. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    icent
    вот прототип функции
    typedef unsigned int nf_hookfn(
    unsigned int hooknum, // имя хука
    struct sk_buff *skb,// буфер сокета
    const struct net_device *in, // принимаемое сетевое устройство
    const struct net_device *out, // сетевое устройсто для отправки пакета
    int (*okfn)(struct sk_buff *)
    );

    Это функция обработчик(перехватчик сетевых пакетов в ядре линекса). Срабатывает когда сетевое устройство передаёт полученные данные ядру ОС.

    Я делаю, что-то напободии фаервола.
    У меня созданы некие структуры, в которых записаны различные ip адреса, и мне нужно внутри функции nf_hookfn, в цикле пройтись по этим адресам.
    Тоесть мне нужно для начала получить, внутри nf_hookfn указатель на начало моих структур.
    Вот собственно вопрос. как это сделать)
     
  4. icent

    icent New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2009
    Сообщения:
    154
    Ну, например можешь для начала взывать эту функцию из своего кода после инициализации структур. В стеке будет адрес возврата, от него как-то плясать, а будучи в коде самой функи уже где-нибудь сохранить этот самый указатель %) Изврат какой-то..:)
     
  5. Freeman

    Freeman New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Глобальную память заюзать никак?
     
  7. icent

    icent New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2009
    Сообщения:
    154
    А можно положить в стек на один параметр больше, типа:

    push struc_addr
    push arg_1
    push arg_2
    push arg_3
    push arg_4
    call test
    pop [куда-нибудь, дабы чтобы очистить стек]
     
  8. icent

    icent New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2009
    Сообщения:
    154
    В конце-концов атом создай.
     
  9. icent

    icent New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2009
    Сообщения:
    154
    Freeman
    Че-за именованные секции?
     
  10. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Freeman
    Как это сделать?

    Booster

    Пробовал, не получилось.

    icent
    Тут сложность,
    Эта функция, стандартная для сетевого фильтра в данной ОС. Чтоб она срабатывала, надо её зарегестрировать, и она вызывается ядром асинхронно(по аппаратному прерыванию)... потому нет возможности что-то запихать в стек .


    это что такое?
     
  11. icent

    icent New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2009
    Сообщения:
    154
    это относилось к первому извратному методу..

    http://msdn.microsoft.com/en-us/library/ms648708(VS.85).aspx
     
  12. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Можешь сделать в коде функции что-то типа
    Код (Text):
    1. void* dataAddress;
    2. __asm
    3. {
    4.      mov eax, 0xFEDCBA98
    5.      mov [dataAddress], eax
    6. }
    7.  
    8. А потом, перед установкой хука, модифицировать тело функции, заменив 0xFEDCBA98 на нужный адрес, тупо поиском соответствующего значения.
     
  13. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Хотя это хороший такой изврат, и для шеллкода только что оправдан.. а что могло не получится с глобальной переменной??))
     
  14. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    NtCreateSection/NtMapViewOfSection..
     
  15. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Velheart
    Пробовал доступ через глобальную переменную сделать , компилятор говорил что андефайнед)..
    хотя, действительно..должно всё через глобальную переменную работать)
    Наверно туплю.
    Напомните основы языка))
    global struct my_struct *struct_ptr


    и в функции) просто доступ к ней..и должно работать?
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Как всё запущено. Указатель и функция в одной программе? Если да, то extern спасёт отца русской демократии.
     
  17. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Спасёт)) спасибо))
     
  18. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Использовать функции, работающие с TLS?
     
  19. Clerk

    Clerk Забанен

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > "перехватчик сетевых пакетов в ядре линекса"
    да, Nt** в линуксе очень спасет.