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

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

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

    _nic New Member

    Публикаций:
    0
    Код (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
    Какой cdecl?
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Код (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
    Так же само.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    __stdcall надо, а не __cdecl
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Код (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
    попробуй так
    Код (Text):
    1.  ((HHOOK (__stdcall*)(int,HOOKPROC,HINSTANCE,DWORD))GetProcAddress(LoadLibraryA("user32"),"SetWindowsHookExA"))(arg1,
    2.              arg2, arg3,arg4);
     
  8. K10

    K10 New Member

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

    spa Active Member

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

    l_inc New Member

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

    K10 New Member

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

    karabas_barabas Member

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

    K10 New Member

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

    spa Active Member

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

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

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

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

    spa Active Member

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

    Rockphorr Well-Known Member

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

    Rel Well-Known Member

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

    Clerk Забанен

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

    0xBADC0DE New Member

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

    K10 New Member

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