Re: [問題] 組譯錯誤訊息看不太懂
※ 引述《Nessa1103 (紫藤茁壯中)》之銘言:
: 以下是我的程式,使用MASM和Visual C++撰寫。組譯錯誤訊息說我沒有定義Fbnc
: 這個符號(error A2006: undefined symbol : Fbnc),可是我明明在下面定義了
: 啊?請問我該怎麼修改比較好?
Fbnc 在呼叫方的下面定義, 所以才會被組譯器視為未定義
同樣原理和處理方式, 高階語言的編譯器亦同
解決方式
1.將 Fbnc 移至呼叫方上方定義
2.在不隸屬任一區段處(.code/.data/.data?/.const)
定義 Fbnc PROTO :DWORD 一行宣告
這樣組譯就會過了
另外, 不太需要自行處理 ebp ...
procedure 只要有任何參數
ml 組譯時會自動安插其對應 code (push ebp ... leave)
procedure 使用到 USES
ml 組譯時會自動安插其對應 code (pop xxx ... leave ret)
推
11/30 22:44,
11/30 22:44
→
11/30 22:46,
11/30 22:46
→
11/30 23:06,
11/30 23:06
stdcall 跟 MASM 版本無關, 有無關係要看其版本是否有支援
stdcall 是 PROC/.MODEL 的宣告方式之一, 其名為 langtype
除了 stdcall 外, 尚有 C, SYSCALL, BASIC, FORTRAN, PASCAL 這幾種 langtype
C - Leading Underscore, Arguments Right to Left, Caller Stack Cleanup
:VARARG Allowed
SYSCALL - Arguments Right to Left, :VARARG Allowed
STDCALL - Leading Underscore, Arguments Right to Left
Caller Stack Cleanup (註解一), :VARARG Allowed
BASIC - Capitalize All, Arguments Left to Right, BP Saved
FORTRAN - Capitalize All, Arguments Left to Right, BP Saved
PASCAL - Capitalize All, Arguments Left to Right, BP Saved
註解一 : 使用 :VARARG, Caller Stack Cleanup
未使用 :VARARG, Called Rotine Must Stack Cleanup
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.168.73
推
12/11 22:43, , 1F
12/11 22:43, 1F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
1
4
ASM 近期熱門文章
PTT數位生活區 即時熱門文章