Вызов функции-члена C++ путем сборки (с использованием asmjit)

Я просто экспериментирую с JIT-компиляцией, используя asmjitбиблиотека. В частности, я хочу вызвать функцию-член экземпляра класса, используя адрес этого экземпляра в качестве аргумента для функции jitted.

Я понимаю, что я должен использовать адрес в качестве первого параметра объекта (при условии, что функция-член без аргументов, адрес будет единственным параметром). По этой причине я mov адрес в rdi. Проблема в том, что я не знаю, как компилятор ( clang-12 в моем случае) назвал функцию, которую я хочу вызвать.

Вызов глобальных функций (или статических) кажется простым, если получить указатель на функцию и callв этом (успешно), но как насчет (нестатических) функций-членов? Похоже clangне называет эти функции регулярно. Я обнаружил, что компилятор использует адреса для вызова таких функций, как call 407180 <_ZNK3Foo5printEv> (куда Foo::print() это функция, которую я хочу вызвать, находится по адресу 407180). Есть ли способ вызвать функцию по имени или получить указатель функции на класс?

0 ответов

Другие вопросы по тегам