۲. ساختار هوک (onEnter / onLeave)
وقتی Interceptor.attach را روی یک آدرس صدا میزنیم، فریدا دو فرصت طلایی به ما میدهد:
onEnter(args): قبل از اینکه تابع اصلی اجرا شود. اینجا به آرگومانهای ورودی دسترسی داریم.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)
}
})