LINUX.ORG.RU

История изменений

Исправление utf8nowhere, (текущая версия) :

Каждый раз когда тебе нужен новый сишный колбэк для метода класса, а поддержки указателя на пользовательские данные в либе нет:

1. Выделяешь mmap-ом кусок памяти с разрешением исполнять код.
2. Записываешь туда машкод вызова метода класса. Адрес метода и указатель на объект класса прописываешь в машкоде.
3. Передаёшь указатель на начало машкода как адрес функции.

Можешь модифицировать шаг 2 под лямбду, наворотить какой-нибудь менеджер памяти с подсчётом ссылок, чтобы на каждый колбэк по странице mmap-ом не выделять и т.д. и т.п.

Исходная версия utf8nowhere, :

Каждый раз когда тебе нужен новый колбэк для метода класса:

1. Выделяешь mmap-ом кусок памяти с разрешением исполнять код.
2. Записываешь туда машкод вызова метода класса. Адрес метода и указатель на объект класса прописываешь в машкоде.
3. Передаёшь указатель на начало машкода как адрес функции.

Можешь модифицировать шаг 2 под лямбду, наворотить какой-нибудь менеджер памяти с подсчётом ссылок, чтобы на каждый колбэк по странице mmap-ом не выделять и т.д. и т.п.