1

osxinj プロジェクトを使用して、open、read、write、lstat などのシステム コールをフックしました。これをAppleが提供するTextEditアプリケーションに挿入すると、すべて正常に機能しました。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に挿入され、以下のコードを使用してopenシステムコールをオーバーライドしようとしました:

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 に挿入されると挿入されます。

Excel に挿入されたときに open が挿入されない理由についての考え。

4

1 に答える 1

0

最後に、コードを実行しました。誰かに役立つことを願って回答を投稿しています。open のエイリアスである __open をフックしたところ、Excel などの i386 アプリケーションでは問題なく動作しました。

于 2016-05-06T13:47:28.303 に答える