簡體   English   中英

比較Intel vs Arm Registers與Swift / lldb

[英]Comparing Intel vs Arm Registers with Swift / lldb

當檢查Swift iOS函數的寄存器時,我不明白為什么我不能創建某些arm64寄存器到x86 / 64寄存器的簡單映射。 我一直在尋找函數的入口。

我嘗試了以下映射,但是沒有用。

在此處輸入圖片說明

通過下面@JasonMolenda 解答

lldb為此有一個方便的$arg變量。

(lldb) reg read $arg5
x4 = 0x0000000000000020

(lldb) po $arg3
1

(lldb) p/x $arg3
(unsigned long) $4 = 0x0000000000000001

現在您無需記住x86 / 64到arm64的映射了:o)

如果您只是在查看調用約定並在函數的進入/退出處注冊(不在中間),那么可以,對於x86-64 System V調用約定而言,它們是正確的。

有關函數調用約定的摘要,請參見在i386和x86-64上UNIX和Linux系統調用的調用約定是什么(請參見https://github.com/hjl-tools/x86-psABI/wiki/X86- psABI ,了解ABI的全部詳細信息,包括按大小傳遞/返回大小結構的大小,以及FP值的大小。)

根據https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64),AArch64的標准調用約定在x0..x7傳遞args,並在x0返回。 (從該超簡短摘要中尚不清楚可以在寄存器中返回多大的arg,是否可以在x1:x0中返回16字節的結構。)


但是函數內部 ,這完全取決於編譯器,甚至沒有嘗試類似的代碼生成。

您正在為單獨的體系結構編譯單獨的二進制文件。 在針對x86-64進行編譯時,編譯器甚至可能甚至沒有嘗試使asm看起來像AArch64一樣,只是應用“按條件”規則並使asm為x86-64盡可能高效地實現了該功能。

不同的調整試探法將導致不同的內聯和其他代碼生成決策。

AArch64比x86-64具有更多的體系結構寄存器。 顯然,即使您使用的x86-64編譯器試圖使x86-64 asm看起來像AArch64 asm一樣,也無法實現1:1映射。

暫無
暫無

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

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