Ste*_*nke 4 delphi macos hook delphi-xe2
我在我的图书馆使用方法挂钩/绕行.
由于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.
Run Code Online (Sandbox Code Playgroud)
事实是,我需要挂钩到TObject.FreeInstance方法以获得每个对象销毁的通知(是的,我知道,如果有人决定覆盖它并且不调用继承,则可能不会调用它).
另一个使用WriteProcessMemory的单元是ReturnTypePatch.pas,它修复了QC#98687,这对于像我这样的模拟库和来自Vincent Parrett的Delphi Mocks来说是不必要的(他们基本上有一个用户在我们都知道这个问题之前报告了这个问题).
WriteProcessMemory的另一个用途是在DSharp的AOP部分中,我基本上用从RTTI的TVirtualMethodInterceptor类创建的代理类VMT替换类的VMT.使用TVirtualMethodInterceptor,您只能代理现有对象 - 我的实现对整个类执行此操作(因此所有现有和将来的对象,即使是继承的).
在所有情况下,使用Move都无法写入内存,因为它们受到保护(在通过调用CopyMemory替换WriteProcessMemory时获取AV).
希望这是关于我正在使用这些功能的足够信息 - 有人可以指出我将在OS X上工作的解决方案(不幸的是我没有,所以我无法测试任何东西).
aba*_*ert 10
与WriteProcessMemory/ReadProcessMemory最直接相同的是Mach调用vm_write/vm_read.你需要一个Mach任务(你可以通过task_for_pid获得),而不是HPROCESS,当然还有很多不同之处.
由于苹果有益取出联机帮助实现这些功能,而不是在任何Xcode的docsets的记录它们,你必须处理的轻微价外的最新非苹果马赫/ MK/GNU的马赫文档,头文件评论(非常好)和/或第三方文章,如http://www.uninformed.org/?v=4&a=3和http://www.phrack.org/issues.html?issue=66&id = 16(您可以从他们的目标受众的URL中猜出).但这很容易.将"内存作弊工具"从Windows移植到Mac,您将花费更多时间重写GUI而不是实现低级别的东西.
但这可能不是做方法挂钩的最佳方法.特别是如果您正在使用ObjC方法,甚至是C API.详细描述您想要做的事情,我可以提供更好的选择.
| 归档时间: |
|
| 查看次数: |
1770 次 |
| 最近记录: |