Есть класс:
class Object {
public:
bool CheckVar( void );
...
}
В памяти программы есть его экземпляр object, нужно из библиотеки подгруженной к ней через LD_PRELOAD вызвать object->CheckVar().
Вызываю так:
Object* object = GetObjAddrFromMemy();
long CheckVar_addr = GetProgAddrFromMem() + CHECK_VAR_OFFSET;
bool CheckVar_result = false;
asm(
"movl %1, (%%esp)\n"\
"call *%2\n"\
"movb %%al, %0\n"\
: "=m" (CheckVar_result)\
: "r" (object), "r" (CheckVar_addr)
);
Хотел бы узнать, можно ли обойтись без асма?
Например так нельзя (не даёт привести тип):
bool (Object::*CheckVar)() = (bool (Object::*)())(CheckVar_addr);
CheckVar_result = (object->*CheckVar)();
Форум —
Development
