0
我正在查看一些來自英特爾編譯器的Linux代碼。它看起來像函數正在爲兩個調用約定一次編譯。映射文件中有許多函數名稱對,如下所示:編譯多個調用約定
0x0000000008000000 __foo
0x0000000008000008 __foo.
函數對之間的偏移量是4,8或12個字節。每個那些對應於1,2或3 MOV指令正在移動棧參數傳遞給寄存器這樣的:
__foo:
mov eax, [esp+4]
mov edx, [esp+8]
__foo.:
push ebp
...
這些指令之後,它看起來像使用regparm慣例開始的功能。
英特爾編譯器是否使用兩種不同的調用約定生成函數,然後使用給定調用方的哪個入口地址是正確的?
你使用什麼選項來編譯代碼? –
我不知道。客戶提供此代碼。我試圖弄清楚如何告訴他們改變他們的構建設置,而不知道他們是什麼。 – mike663