Mach Injection: системный вызов open не вставляется при внедрении в Excel

Я подключил системные вызовы open, read, write, lstat и т. д., используя проект osxinj. Внедрил это в приложение TextEdit, предоставленное Apple, и все заработало нормально. Когда я открыл новый файл с помощью textedit, был вызван opencallback, и сообщения были зарегистрированы в файле system.log.

typedef int (*open_type)(const char *, int, mode_t);
open_type open_func = 0;
int opencallback(const char* path, int oflag, mode_t mode)
{
    syslog(LOG_ALERT, "In open...");

    int returnVal = open_func(path, oflag, mode);
    syslog(LOG_ALERT,"Open, ends\n");
    return returnVal;
 }

Введен в Excel и попытался переопределить открытый системный вызов, используя следующий код:

void* func_ptr =  dlsym( RTLD_NEXT, "open");
if (func_ptr)
{ 
    open_func = (open_type)func_ptr;
    mach_error_t me = mach_override_ptr( func_ptr,
                           (void*)&opencallback,
                           (void**)&open_func);
}

opencallback вызывается при внедрении в TextEdit, но не вызывается при внедрении в Microsoft Excel. Но код, написанный в тех же строках для других системных вызовов read, write, lstat, вставляется при внедрении в Excel.

Любые мысли о том, почему open не вставляется при внедрении в Excel.


person Premsagar    schedule 04.05.2016    source источник


Ответы (1)


Наконец-то я запустил свой код. Я отправляю ответ, надеясь, что это может помочь кому-то. Я подключил __open, который является псевдонимом для open, и он отлично работал для приложения i386, такого как excel.

person Premsagar    schedule 06.05.2016