2013-03-07 73 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