Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
IDLEVEL

Вызов .NET функции clrcall из ассемблера

15.09.2010, 23:22. Показов 1014. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
делаю .NET хук, появилась проблема вызова из unmanaged code'a unmanaged функции
Marshal.GetFunctionPointerForDelegate имеет очень низкую скорость вызова полученного адреса.

во время выполнения программы я получаю адрес managed функции
записываю в функцию которую нужно хукать -
0xE9 [адрес managed функции]

но чтобы все правильно работало нужно до инструкции jump что-то написать

Может ли кто то подсказать как сгенерировать assembler'е код для вызова функции с конверсией clrcall.
Лучше если подскажете алгоритм, как я понял он зависит от количества и размера параметров вызываемой функции.

то есть нужно

Code
1
2
3
4
5
typedef int ( __clrcall * ClrFunctionPointer) = (адрес функции известен);
 
void __stdcall Function(int value) {
  return ClrFunctionPointer(value); // нужно динамически генерировать этот код
}
я плохо знаком с ассемблером, но как я понимаю надо надо что-то делать со стеком и регистрами
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2010, 23:22
Ответы с готовыми решениями:

Вызов С++ функции из ассемблера
Здравствуйте, есть массив в ASM(уже инициализированный), вызывается функция С++ которая сортирует и возвращает уже отсортированный массив....

Вызов функции C из ассемблера
global main extern printf extern puts section .text main:

Вызов функции fgets() из Ассемблера
Есть необходимость вызвать функцию fgets() из кода на ассемблере, не понятно, как передать параметр, который обозначает поток. Пробовал...

2
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
16.09.2010, 00:00
По данным MSDN clrcall невозможен из асма. И даже если в вызвающей функцие есть просто инлайн асм - clrcall тоже невозможен. Такие коллы можно делать только из managed code, вызывая managed functions или из обычного C++ с ключём компиляции /clr.

Моё предположение. Эти коллы не имеют стандартизированного порядка вызова/возвращения. Точный порядок генерируется алгоритмами под каждый отдельный случай. А stdcall, ccall, fastcall имеет определнный порядок вызова/возвращения, который никогда не меняется, поэтому их можно вручную вызывать.
0
IDLEVEL
16.09.2010, 00:18
Но ведь как то Marshal.GetFunctionPointerForDelegate работает...
Наверное надо в сторону JIT компилятора посмотреть
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2010, 00:18
Помогаю со студенческими работами здесь

Вызов функции в .NET-приложении
Нужно решить не особо сложную задачу из умножения матриц. Решил использовать для этой цели matlab. В общем функция должна принимать 6...

Вызов серверной функции с помощью JavaScript в ASP.NET
У меня следующая засада: есть веб-форма, есть серверная функция, которая должна вызываться нажатием некой кнопки, и, соответственно, есть...

Раскладка клавиатуры и вызов API функции ToAscii на .net
Есть функция хука клавиатуры в .net приложении: private class KeyboardHookStruct { /// <summary> ///...

Вызов фунции из ассемблера
Здравствуйте. Есть код, вызывающий несколько функций си и WinAPI. Вот так работает: void printName() { wchar_t* fmt2=L"%s"; ...

Вызов функции DLL VB.NET в DLL C++
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru