- 在彙編中,您應該在調用C標準庫函數之前備份寄存器嗎?
- 標準庫是否保證其所有函數都會備份調用者的寄存器並最終恢復它們?
- 我在哪裏可以找到有關此事的官方信息?
回答
它是平臺特定的,通常你不需要在呼叫站點專門保存和恢復寄存器,被調用者通常會這樣做。您只需要遵循特定平臺的鏈接約定。 C庫不是無狀態的,通常不調用一些函數而不初始化庫,因爲它是在包含main()的典型c程序對象中完成的。
我認爲只是調用約定適用於此。 http://en.wikipedia.org/wiki/X86_calling_conventions
C標準庫不保證它是調用者的函數備份寄存器。它取決於調用約定以及編譯器如何處理它。
假設C函數對寄存器一無所知。
你會發現函數正在使用哪個調用約定,形成函數的聲明/簽名。默認應該是cdecl。
這是一個特定於平臺的問題,而不僅僅是一個特定於硬件的問題。 C標準庫被設計爲可以從C程序調用,其中調用約定(通常)在編譯時處理,並且適合的寄存器和堆棧操作是爲您完成的。
請參閱平臺特定的ABI指南以確定如何調用外部鏈接的功能。
如何找到我的平臺的ABI指南? (赦免無知)。 –
這取決於你在使用什麼平臺? Windows 32位? 64位? Mac OS X 32位? 64位? Linux的特別味道? MS-DOS? –
@LeifEricson http://google.com/ – 2012-06-04 18:23:49
- 1. 在函數調用之前保存XMM寄存器
- 2. 強制函數在進行函數調用之前恢復所有寄存器
- 3. 在備份之前刪除數據庫
- 4. 函數應該調用嗎?
- 5. 在<C-r>函數調用後恢復寄存器
- 6. 在調用File.Delete之前,我應該調用File.Exists嗎?
- 7. C++(嵌套)函數調用指令 - 寄存器
- 8. 在C和C++中調用函數時EAX寄存器初始化的差異
- 9. 我應該在mongodump/mongorestore之前壓縮MongoDB數據庫嗎?
- 10. sqlite備份內存數據庫C++
- 11. 可以/應該通過單個指針訪問多個設備寄存器嗎?
- 12. 貝寶數據在存儲之前應該進行加密嗎?
- 13. C#將應用程序mdb數據庫保存爲備份
- 14. NSURLConnection在它應該調用connectionDidFinishLoading之前?
- 15. 我應該在存儲到數據庫之前修剪字符串嗎?
- 16. Lua的C API寄存器後備__index
- 17. 添加參數的函數調用該函數之前 - Node.js的
- 18. C寄存器調用約定
- 19. 您應該使用臨時表在存儲過程之間傳遞數據嗎?
- 20. 我應該在ObjectOutputSream的close()之前調用reset()嗎?
- 21. 我應該備份「eclipse」文件夾嗎?
- 22. 我應該備份「.svn」文件夾嗎?
- 23. 在使用NHibernate時,您應該在映射文件之前創建數據庫表嗎?
- 24. 您可以將MarkLogic備份還原到新的數據庫嗎?
- 25. ASM - 在「函數調用」期間修改寄存器
- 26. 我應該在dlopen之前鎖定嗎?
- 27. 應該在函數之前還是之內加載數據集?
- 28. Tsql數據庫備份C#
- 29. 在數據庫被DropCreateDatabaseIfModelChanges刪除之前進行備份
- 30. Sql management Studio 2014在重裝之前崩潰+備份數據庫
我不明白你想說什麼。 –
這裏有一點編輯.. – Ivarpoiss