[英]How to resolve variable number of arguments problem of printf if reverse printing is not allowed
我正在學習關於語言設計的課程,這個特殊問題與 C 中的 printf 如何處理 arguments 的可變數量問題有關。 從本質上講,我了解到 printf 會將 arguments 從最后一個一直推到存儲有關偏移量信息的格式字符串,以便幀指針找到格式字符串,然后使用從格式字符串派生的偏移量來查找參數偏移量。
但是當 arguments 的反轉是不允許的時,我提出的問題要求另一種方法來處理這個問題。 這讓我很困惑。 目前,我的方法是將幀指針移動到運行時堆棧的最低點,以便它找到格式字符串並且與實際值的偏移量為正。
請指教
x86-64 上的左起第一個參數將保存在 EDI 寄存器中。
如果您要為不同的調用約定設計一個新的編譯器,您可以讓編譯器推送完成調用的實際 arguments 的編號,或者將該編號設置在特定寄存器(如 RAX/EAX)中,該寄存器將被覆蓋反正。
另一種選擇是重新定義printf()
API 以將格式字符串作為最后一個參數。 通過這種方式,您將擁有訪問堆棧以查找參數所需的一切。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.