2016-11-08 124 views

回答

4

代碼模型是來自AMD64 ABI的術語(有關更多信息,請參閱從https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf獲取的3.5.1)。

總之 - x64-64指令中的大部分偏移量都是PC相對的,但是指令內的直接字段只有32位長。因此,如果數據距代碼「遠」(相距超過32位),則不能使用指令內的立即字段來高效編碼偏移量,並應明確計算地址。代碼模型對代碼和數據的相對位置提供了各種限制。

如果你正在靜態編譯所有東西,那麼'小'是安全的(和默認)。如果你正在使用JIT,那麼一切都是可能的,特別是如果啓用了ASLR,你需要使用中/大型代碼模型。