[問題] c語言使用組合語言呼叫函式sp數值問題

看板C_and_CPP作者 (國寶)時間9年前 (2016/03/05 17:16), 9年前編輯推噓2(208)
留言10則, 3人參與, 最新討論串1/1
開發平台(Platform):c++&asm 問題(Question):c語言用組合語言去呼叫一個函式,觀察跳躍前後sp內的數值 ,單純用組合語言sp會差2,用c語言使用組合語言呼叫的會差6 請問有什麼盲點嗎? 麻煩各位大大解答了 有用反組譯去看機械碼 在呼叫函式進入後 函式的開頭有SP+4跟結尾SP-4 有些是開頭有SP+8跟結尾SP-4 請問這個別是什麼原因加上的 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.125.20.146 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1457169393.A.B67.html ※ 編輯: q22049202 (140.125.20.146), 03/05/2016 17:38:14

03/05 17:41, , 1F
可以貼一下你看到的機械碼...
03/05 17:41, 1F

03/05 17:43, , 2F
這些比較跟編譯器使用的 calling convention 有關
03/05 17:43, 2F

03/05 17:43, , 3F
不過你可能有哪裡弄錯了, stack 是倒著長的, 所以一般來說
03/05 17:43, 3F

03/05 17:44, , 4F
進函式時是 sp = sp - size, 出函式時 sp = sp + size
03/05 17:44, 4F

03/05 17:45, , 5F
你可能看到了使用 sp 存取參數的間接定址了
03/05 17:45, 5F

03/05 17:45, , 6F
(你講的那個 sp+4 如果是在 [] 裡的那就是了)
03/05 17:45, 6F

03/05 20:08, , 7F
http://imgur.com/a/n6TYY 附上程式碼
03/05 20:08, 7F

03/05 20:08, , 8F
可以方便問一下 為什麼是+4嗎?是為了函式內有可能
03/05 20:08, 8F

03/05 20:09, , 9F
要擺放東西預先空間?
03/05 20:09, 9F

03/06 14:27, , 10F
_cdecl _stdcall _fastcall請問你用哪一個call你的fun
03/06 14:27, 10F
文章代碼(AID): #1MsgFnjd (C_and_CPP)