【发布时间】:2012-09-11 17:45:47
【问题描述】:
我意识到试图篡改来自另一个应用程序或操作系统的内存被认为是糟糕的编程。
但是,我不懂Objective C,我需要从一个固定的内存地址读取25个字节到一个变量中,然后用不同的集合替换这25个字节。
我对指针以及所有 * 和 & 和 @ 符号的含义都很糟糕。
我正在使用 XCode 4.4.1 在 Mac OS X 10.8 (Mountain Lion) 中尝试此操作。
我尝试过类似的方法:
char *myPtr = (char*) 0x7FFA8000 // just an example, not the real memory address
char myString[] = *myPtr
【问题讨论】:
-
我对 iOS 的细节了解不多,但我怀疑您是否有权访问物理内存来获取固定位置。您将可以访问您的进程内存。
-
如果您需要访问“主内存”中的某个特定位置,可能有一个 OSx API 用于执行此操作,用于访问系统存储的某些特定区域的特权方法。但这将是一个 OSx API,而不是特定于 Objective-C 的。
-
@PaulR 为您提供了执行此操作的代码。但真正的问题是:您对“固定内存地址”的定义是什么?因为除非您在内核级别执行代码,否则没有这样的事情。您可能得到的最好的结果是映射到固定地址的非固定虚拟地址。而且您需要一些特殊的内核 API 来实现这一点(甚至不确定在 Os X 上是否有任何公共 API 可以做到这一点,因为在这样的事情中没有用户级应用程序的业务)。
-
是的,我已经确认一旦操作系统加载它就无法工作。但是我可以在将操作系统加载到 EFI Shell 之前写入需要更改的特定内存地址(使用 EFI Shell 的本机 mm 命令)。
标签: objective-c memory pointers osx-mountain-lion xcode4.4