Как динамически вызвать SetWindowsHookEx?

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 18 мар 2010.

Статус темы:
Закрыта.
  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Код (Text):
    1. typedef HHOOK (__cdecl * ffSetWindowsHookEx)(int,HOOKPROC,HINSTANCE,DWORD);
    2. ffSetWindowsHookEx ___SetWindowsHookEx;
    3. ...............................................................................................
    4. HMODULE lib =LoadLibraryA("user32.dll");
    5. ...............................................................................................
    6. ___SetWindowsHookEx=(HHOOK(*)(int,HOOKPROC,HINSTANCE,DWORD))GetProcAddress(lib,"SetWindowsHookExA");
    7. //при вызове такого бьется стек
    плз подскажите мне ,чего я незнаю???
     
  2. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Какой cdecl?
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Код (Text):
    1. typedef HHOOK (*ffSetWindowsHookEx)(int,HOOKPROC,HINSTANCE,DWORD);
    2. ffSetWindowsHookEx ___SetWindowsHookEx;
    3. ...............................................................................................
    4. HMODULE lib =LoadLibraryA("user32.dll");
    5. ...............................................................................................
    6. ___SetWindowsHookEx=(ffSetWindowsHookEx)GetProcAddress(lib,"SetWindowsHookExA");
    а если так?
     
  4. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Так же само.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    __stdcall надо, а не __cdecl
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Код (Text):
    1. typedef HHOOK (WINAPI* ffSetWindowsHookEx)(int,HOOKPROC,HINSTANCE,DWORD);
    2. ffSetWindowsHookEx ___SetWindowsHookEx;
    3. ...............................................................................................
    4. HMODULE lib =LoadLibraryA("user32.dll");
    5. ...............................................................................................
    6. ___SetWindowsHookEx=(ffSetWindowsHookEx)GetProcAddress(lib,"SetWindowsHookExA");
    а если так?))))
     
  7. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    попробуй так
    Код (Text):
    1.  ((HHOOK (__stdcall*)(int,HOOKPROC,HINSTANCE,DWORD))GetProcAddress(LoadLibraryA("user32"),"SetWindowsHookExA"))(arg1,
    2.              arg2, arg3,arg4);
     
  8. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    // offtop
    Глядя на эти марсианские языковые конструкции мне все больше нравится асм...
    Как вы на ЭТОМ программируете?
     
  9. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    как и большинство, понявших зачем нужны яп, понимающих что архитектуры процессоров не вечны. А если уж совсем говорить прямо, то это задача выходит за рамки предусмотренных языком. Хотя не понятно как можно не понять конструкции? объявляем тип "указатель на функцию" с такимито аргументами, далее получаем указатель и потом вызываем. Что сильно сложно? может вам сначала попробовать? а потом критиковать? или мозгов не хватает, понимаете яп это лишь ИНСТРУМЕНТ, покажите мне задачу, которую можно решить на ассемблере быстрее или эффективнее чем на тех же сях? нету таких задач, но тут надо подумать чтобы понять почему их в прицепе не может быть (прям вообще это очевидно, что таких ЗАДАЧ НЕ МОЖЕТ СУЩЕСТВОВАТЬ ,их не просто нету их не может быть). Я уж помолчу насчет того как это все с архитектуры на архитектуру переноситься. Понимаете компьютер для человека, а не наоборот. А вы только и можете что выпендриваться, что на асме на вашем написано чем вы пользуетесь? ось на нем написана которую юзаете? идите на колибри, или напишите хоть что-нибудь, чтобы я мог сказать "да вот это круто, асм рули", и хватит уже трепать языком. Надо быть дегродатом чтобы писать большой или вообще любой проект на асме, повышенные риски, непереносимость, читаемость отвратительная, а плюсы? нету.
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    spa
    Интересненько... а ну-ка покажите мне thread safe spinlock на сях без использования средств ОС. Или ещё лучше... boot loader, переводящий процессор в защищённый режим.
     
  11. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    spa
    Я бы сказал, но вы как обычно заявите, что это не правильная задача, где это вобще нужно и т.д...
     
  12. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    покажи этот кусок кода на асме, у меня вообще все в одну строчку поместилось )) а на асме в одну строчку не уместишь )
     
  13. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Код (Text):
    1. invoke LoadLibrary, zStr("user32.dll")
    2. invoke GetProcAddress, EAX, zStr("SetWindowsHookExA")
    3. MOV ___SetWindowsHookEx, EAX
    куда как проще и понятнее...
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    да вот "бы" мешеется. Сразу скажу про низкоуровневые драйвера и все такое, естественно крайне редко нужны асм вставки, дрова для винды например _рекомендовано_ писать без них. Про переносимость, повторяться не буду, вы дальше своего носа не видите.

    l_inc
    Асм вставки естественно разрешаються, тк отсутсвие той или иной возможности на низком уровне проблемма компилятора, ведь так? или допустим интол сделала новую инструкцию "фак мой мозг" но ведь текущие "компиляторы" асемблера его не потдерживают.

    а зачем? ос свою писать? ну так это, там тоже пару вставок в любом случае сделать придется, ну парочка инлай функций, но зачем ДЛЯ ЗАДАЧИ в целом, вы бы еще спросили "а как в EAX поместить из си?" лол короче, тогда можно сказать "как обьявить int на асме" причем, не DWORD там или еще чего, а именно сишный инт. Те попробуйте понять одну вещь, если нужна маленькая вставочка, это не значит что нужно писать все на ассемблере. А про буд сектор, ну что я могу сказать, небольшая программка которая грузит старшего собрата на си? да это точно проект на асме, крупный главное, вот и я говорю там ему и месть.

    И еще одно, даже задачи где я говорил "надо маленькую вставочку" можно решить на маш кодах в крайнем случае, но зачем? Давайте наконец поймем 2 строчки на ассемблере, не можно назвать программой. И главное, ГДЕ ЗАДАЧА КОТОРУЮ нельзя решить? естественно там где предусмотренный использование асма там он и используется, допустим появился бы комп который понимает только си, никакого асеблера ) какая разница? комп это инструмент! те по вашей логике есть задачи которые решаются только на паскале ( просто предполагаем существование паскалекомпьютерра). В завершение скажи тогда чтобы вы наконец поняли глупость ваших аргументов! Вот я знаю задачу которую нельзя решить за приемлемое время без строчки "%&#$^#HFLKSAfhdsjhusy#&$" (узнать что лежит в зашифрованном сообщении) и что дальше?
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    давайте у кого проще и понятнее будет сделать "обзорщик" древа каталогов? я на с++ с Qt вы на асме, даже закроем глаза что у меня получиться кросплатфом, с поддержкой CSS, а у вас, ну посмотрим. Будем? или все-таки хоть сейчас до вас дойдет что КАЖДОЙ ЗАДАЧИ СВОЙ ИНСТРУМЕНТ?
     
  16. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    spa
    всё верно, за исключением того случая когда
    что вышивание крестиком для жены
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    хех... да, выглядит это понятнее среднестатистическому программисту... но опять же надо знать, как ее вызвать... а с этим у автора темы и возникла проблема...
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    spa
    В VisualBasic-е заложена концепция полного отказа от системных вещей. Там нельзя манипулировать указателями, вызывать какойто произвольный код, регистры и пр.(разумеется всё можно обойти окольными путями). Общение с осью выполняется только через API - экспортируемые входы в модулях, модель вызова которых кратко описана. Это код в сферическом вакууме, где за именем функции скрывается не доступный и не известный функционал. А экспорта часто не достаточно, когда возникает проблема с отсутствием какойто апи в экспорте, тогда "кодер" понимает что ничего не поделать, придётся брать дизасм..
    Если мой код должен работать на x86, то зачем юзать скрипты, если можно на асме описать ?
     
  19. 0xBADC0DE

    0xBADC0DE New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2010
    Сообщения:
    3
    spa Если ты в таком восторге от C/C++ то что ты тут вообще забыл?
     
  20. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    spa
    Я сказал, что мешает - полная бесполезность что либо вам говорить, задачу, которую гораздо лучше решить на асме, чем на С, вы сразу обьявите некошерной, ненужной и неправильной. Вместо этого зато предложите написать какой нибудь обзорщик каталогов или еще какой гуан...
    куда переносимость? на мертвый линупс чтоли? да кому он нужен...
    качать 10М по моему интернету будет долго и накладно )
     
Статус темы:
Закрыта.