Skip to content

۲. ساختار هوک (onEnter / onLeave) ​

وقتی Interceptor.attach را روی یک آدرس صدا می‌زنیم، فریدا دو فرصت طلایی به ما می‌دهد:

  1. onEnter(args): قبل از اینکه تابع اصلی اجرا شود. اینجا به آرگومان‌های ورودی دسترسی داریم.
  2. onLeave(retval): بعد از اینکه تابع اجرا شد. اینجا به مقدار خروجی (Return Value) دسترسی داریم.

مفهوم پوینتر (Pointer)

در Interceptor، همه چیز NativePointer است. آرگومان‌ها (args[0]) مقدار نیستند، بلکه آدرسِ آن مقدار در حافظه هستند. برای دیدن متن، باید محتوای آن آدرس را بخوانید.

کد فریدا (ساختار پایه):

javascript
var funcPtr = Module.findExportByName(null, "some_function")

Interceptor.attach(funcPtr, {
    onEnter: function (args) {
        /* args[0], args[1] ... اشاره‌گر به ورودی‌ها هستند */        
        console.log("[*] Called with arg0: " + args[0])
    },
    onLeave: function (retval) {
        /* retval اشاره‌گر به خروجی است */        
        console.log("[*] Returned: " + retval)
    }
})