在Windows上有一些库允许您拦截对DLL的调用:
http://www.codeproject.com/kb/system/hooksys.aspx
可以在Mac OS上执行此操作吗?如果是这样,它是如何完成的?
Nic*_*ley 23
答案取决于您是想在自己的应用程序中还是在系统范围内执行此操作.在您自己的应用程序中,它非常简单; 动态链接器提供诸如的功能DYLD_INSERT_LIBRARIES.如果您正在进行调试/检测,请查看DTrace.
您可以使用方法调配替换Objective-C方法实现,例如JRSwizzle或Apple method_exchangeImplementations(10.5+).
如果要在系统范围内修改库行为,则需要加载到其他进程的地址空间.
mach_inject/mach_override是一组开源的库,分别用于加载代码和替换函数实现; 但是,您负责编写自己的使用库的应用程序.(另外,看一下这个答案 ;你需要特殊的权限才能将代码注入其他进程.)请记住,Apple强烈建议不要进行非调试用途的应用程序修补/代码注入,并且一些Mac用户(和开发人员)对此做法非常挑剔.这些批评很多都没有得到充分的了解,但是有很多合法写得不好的"插件"(特别是那些修补Safari的插件)与应用程序崩溃和问题有关.代码防守.
(免责声明:我是(免费)APE模块的作者和使用的应用程序mach_inject.)
| 归档时间: |
|
| 查看次数: |
9983 次 |
| 最近记录: |