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