macos – OS X上的WriteProcessMemory等价物

macos – OS X上的WriteProcessMemory等价物,第1张

概述我在我的图书馆使用 method hooking/detour. 由于WriteProcessMemory / ReadProcessMemory是Windows API函数,因此OS X上方法挂钩/绕行的解决方案是什么? 编辑: 好的,让我在这里提供更多信息,以便更清楚我为什么要问这个问题: 在我的DSharp库的即将推出的功能中,我有以下代码: procedure FreeInstance(S 我在我的图书馆使用 method hooking/detour.

由于WriteProcessMemory / ReadProcessMemory是windows API函数,因此OS X上方法挂钩/绕行的解决方案是什么?

编辑:

好的,让我在这里提供更多信息,以便更清楚我为什么要问这个问题:

在我的DSharp库的即将推出的功能中,我有以下代码:

procedure FreeInstance(Self: TObject);begin  ...  Self.CleanupInstance;  FreeMem(Pointer(Self));end;var  FreeInstanceBackup: TXRedirCode;initialization  ...  HookCode(@TObject.FreeInstance,@FreeInstance,FreeInstanceBackup);finalization  UnhookCode(@TObject.FreeInstance,FreeInstanceBackup);  ...end.

事实是,我需要挂钩到TObject.FreeInstance方法以获得每个对象销毁的通知(是的,我知道,如果有人决定覆盖它并且不调用继承,则可能不会调用它).

使用WriteProcessMemory的另一个单元是ReturnTypePatch.pas,它修复了QC #98687,这对于像我这样的模拟库和来自@R_419_4955@ Parrett的Delphi Mocks来说是很麻烦的(在我们都知道这个问题之前,他基本上有一个用户报告了这个问题).

WriteProcessMemory的另一个用途是在DSharp的AOP部分中,我基本上用从RTTI的TVirtualMethodInterceptor类创建的代理类VMT替换类的VMT.使用TVirtualMethodInterceptor,您只能代理现有对象 – 我的实现为整个类执行此 *** 作(因此所有现有和将来的对象,即使是继承的).

在所有情况下,使用Move都无法写入内存,因为它们受到保护(在通过调用copyMemory替换WriteProcessMemory时获取AV).

希望这是关于我正在使用这些功能的足够信息 – 有人可以指出我将在OS X上工作的解决方案(不幸的是我没有,所以我无法测试任何东西).

解决方法 与WriteProcessMemory / ReadProcessMemory最直接相同的是Mach调用vm_w​​rite / vm_read.你需要一个Mach任务(你可以通过task_for_pID获得)而不是HPROCESS,当然还有很多不同之处.

由于Apple已经帮助删除了这些函数的联机帮助页,并且没有将它们记录在任何Xcode文档集中,因此您必须处理稍微过时的非Apple Mach / MK / Gnu-Mach文档,即头文件评论(非常好)和/或第三方文章,如http://www.uninformed.org/?v=4&a=3和http://www.phrack.org/issues.html?issue=66&id=16(您可以从他们的目标受众的网址中猜出).但这很容易.将“内存作弊工具”从windows移植到Mac,您将花费更多时间重写GUI而不是实现低级别的东西.

但这可能不是做方法挂钩的最佳方法.特别是如果您正在使用ObjC方法,甚至是C API.详细描述您想要做的事情,我可以提供更好的选择.

总结

以上是内存溢出为你收集整理的macos – OS X上的WriteProcessMemory等价物全部内容,希望文章能够帮你解决macos – OS X上的WriteProcessMemory等价物所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1268185.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存