2013-03-07 81 views
0

可能是一个非常愚蠢的问题,但有人可以解释为什么不能编写汇编代码来触发系统功能或控制硬件?例如,是不是可以编写代码来切换屏幕关闭/打开,甚至是设备的电话?汇编代码到系统函数(iPhone)

我不是在谈越狱的设备,也没有为应用程序商店做一个应用程序。正常的应用程序与程序集调用系统函数。

如果确实有可能,任何人都有一个很好的参考或起点来实现这样的任务?

谢谢

+0

它可能使用Android NDK。 – user1929959 2013-03-07 23:51:39

+0

对不起,你错过了iPhone头... – George 2013-03-07 23:55:34

+0

我怀疑只有iPhone的操作系统。 – user1929959 2013-03-07 23:57:16

回答

2

iPhone使用内存保护操作系统,其中每个用户进程都包含在其自己的虚拟内存地址空间中。地址空间受存储器管理单元(MMU)硬件保护,并尝试访问由操作系统提供给进程的区域以外的内存将导致异常。操作系统为自身保留硬件内存范围,但不会将其提供给用户进程。因此,从用户进程直接连接到硬件是不可能的。

1

肯定可以从汇编代码中调用系统函数。你认为C或C++应用程序有什么作用?它确实如此。 C/C++和汇编代码最终都将(在编译时)转换为CPU执行的机器代码。

我不确定引导的目的是为了做这样的事情,但是你当然可以在调试器中运行C程序,看看它如何调用各种系统函数,或者你可以拆卸这个程序并阅读反汇编在调试器中运行程序。

在任何情况下,用程序集编写的程序都不能从用C编写的程序获得对设备的更多控制。操作系统应限制在CPU级别直接访问某些I/O设备和存储区,在汇编和C之间没有区别,对CPU来说都是一样的,只是机器代码中的一堆指令。

+0

请注意,沙箱以及许多其他限制,除了你正在注意的那些之外,他们实际上应该这样做(这是出于安全原因)。另外客观的c实际上只是c代码,当你进入其内部时,没有什么太花哨的东西 – DanZimm 2013-03-08 00:12:18

+0

我可能非常愚蠢或天真。回到“过去的日子”,我知道设置硬件标志/地址可以管理硬件。 IE浏览器。通过给定的内存呼叫弹出CD托盘。现在忽略操作系统,这些调用肯定会在内存范围内,以便操作系统也可以调用它们。我猜测识别这个调用的调用者的开销在汇编级别是不可行的,所以再次,为什么有人不能执行它们?我能想到的唯一的事情是内核不允许它,但你没有进行内核调用......对不起,我可能会错过一些东西。 – George 2013-03-08 00:35:19

+1

早在过去,CPU就是这个......笨蛋。目前,通用CPU具有各种保护和安全功能,操作系统可以将CPU配置为自行访问所有内容,并限制用户级应用程序访问。大多数情况下,这意味着只有OS可以执行的CPU指令集的一个子集,OS以这样的方式配置MMU(通常是页表):只有特定区域的存储器可以被读取和执行并写入由应用程序。 – 2013-03-08 00:43:25