Calling C++ member function by assembly (using asmjit)

440 views Asked by At

I'm just experimenting with some JIT compilation, using the asmjit library. Specifically, I want to call a member function of a class instance using the address of that instance as an argument for the jitted function.

I understand that I have to use the address as the first parameter of the object (given a member function without any arguments, the address will be the only parameter). For that reason, I mov the address into rdi. The problem is, that I do not know how the compiler (clang-12 in my case) named the function I want to call.

Calling global functions (or static ones) seems simple by getting the function pointer and calling that one (tried that successfully), but what about (non-static) member functions? Looks like clang does not name those functions regularly. I found that the compiler uses addresses to call those functions like call 407180 <_ZNK3Foo5printEv> (where Foo::print() is the function I want to call, located at 407180). Is there any way to call the function by name or get the function pointer to the class?

0

There are 0 answers