【发布时间】:2013-07-17 06:20:15
【问题描述】:
我有以下功能:
int __declspec() MyFunc(SOCKET sSocket, const char* sData, int sSize, int sFlag)
{
pSocket = sSocket;
return send(sSocket,sData, sSize, sFlag);
}
这是编译后的汇编代码:
PUSH EBP
MOV EBP,ESP
PUSH DWORD PTR SS:[EBP+14] // Flags
MOV EAX,DWORD PTR SS:[EBP+8]
PUSH DWORD PTR SS:[EBP+10] // DataSize
MOV DWORD PTR DS:[pSocket],EAX
PUSH DWORD PTR SS:[EBP+C] // Data
PUSH EAX // Socket
CALL DWORD PTR DS:[<&WS2_32.#19_send>] // send
POP EBP
RETN
我的问题是:
-
RETN、RETN 8或RETN 10有什么区别? - 我必须将最终的
RETN更改为RETN 10,我应该对我的C++ 代码进行哪些更改?
【问题讨论】:
-
我建议你买一本关于 x86 汇编语言的书来了解 retn 和 retn 10 之间的区别。
-
我建议看看类似的问题stackoverflow.com/questions/1396909/…
-
谢谢,我得到了 retn 和 retn 10 的区别,我的第二个问题呢?
-
“我的第二个问题呢”:写成
stdcall? (即,如果您使用 GCC,请在函数中添加__attribute__((stdcall))) -
@Michael "错误:标识符 "stdcall" 未定义,我可以将
__stdcall添加到我的函数中吗?