簡體   English   中英

使用x86材料在64位操作系統上學習組裝?

[英]Using x86 materials to learn assembly on a 64 bit OS?

我正在自學/閱讀有關裝配的內容。 大多數關於匯編的書籍都是指x86-代碼中的所有寄存器名稱都以“e”開頭,而不是“r”(就像在x86-64中那樣)。 但是,我使用64位Linux,我想知道這些書是否有任何價值,因為它們不是指x86-64。

所以簡而言之,使用這些資源來學習x86-64真的很值得。 或者改寫不同,除了寄存器命名約定的不同之外 - 兩者之間是否有任何其他差異可能使得從x86材料學習變得困難?

64位Linux允許運行32位應用程序,因此您仍然可以在計算機上創建32位應用程序。 這樣,書籍和示例32位代碼非常有用。

您可能遇到的唯一問題是程序集應用程序是否動態鏈接到某個32位共享庫。 為了解決這個問題,您應該安裝32位兼容層。

只使用Linux系統調用的匯編程序在沒有這個層的情況下工作正常,這實際上是為32位編譯的共享庫集。

順便說一句,在我看來,如果你希望你的程序對更多人有用,編寫32位代碼仍然會更好。 周圍仍有許多32位計算機,它們不會很快消失。

由於調用約定和堆棧管理更簡單,因此在32位上學習匯編確實更容易一些。

在64位你需要擔心ABI。 不僅如此,每個操作系統的約定都不相同。 例如,Mac OS X上的ABI規則與Windows上的規則不同(寄存器不同,在Windows上它只使用4個寄存器)。

您可以使用-arch i386和匯編程序(as)編譯匯編代碼。 使用clang或gcc,您可以使用-m32(至少在Mac OS X上,因為我沒有在Linux上使用它)。 您將無法鏈接具有不同位數的模塊(32位與64位)。

一旦你准備好為64bit切換或編譯你的程序,你必須確保當你處理堆棧時,你需要推動64位字而不是32位字,但這有點說。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM