请问下面嵌入汇编函数的返回值?

kmfangxun 2007-11-24 04:10:25

请问下面嵌入汇编的函数返回值,是EAX吗?

function Start:DWORD;stdcall;
asm
CALL @@1
@@1:
POP EAX
SUB EAX, 5
end;

//转为C嵌入汇编如下,对不对?
DWORD __stdcall Start()
{
DWORD rs;
asm{
CALL @@1
@@1:
POP EAX
SUB EAX, 5
MOV rs, EAX
}

return rs;

}
...全文
256 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmfangxun 2007-11-26
  • 打赏
  • 举报
回复

to pig4210:

在Cbuilder下是可以的。

http://topic.csdn.net/u/20071123/12/ddefb0fa-ffc7-40da-a73c-7b4443b6debc.html
pig4210 2007-11-26
  • 打赏
  • 举报
回复
其实那个局部变量可以不要吧,因为反正最后也是mov eax,[rs]&retn。但没有实际编译过,不清楚能不能编译通过。
另外,C++就不支持@@标志。好像也不支持标记在使用之后声明的写法。
ly_liuyang 2007-11-25
  • 打赏
  • 举报
回复
哈哈~是获取EIP的~最常见的Shell,Patch和Virus技术手段
kshuangshuzhen 2007-11-25
  • 打赏
  • 举报
回复
顶一下
kmfangxun 2007-11-25
  • 打赏
  • 举报
回复

多谢各位, 本人Pascal比较菜,见到有函数好像不返回,就有些疑惑,呵呵!
Syant 2007-11-24
  • 打赏
  • 举报
回复

这样的问题试一下就知道了,,,

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:dword;
begin
i:=0;
i:=Start;
j:=i+7;
showmessage(inttostr(j));
end;

在i:=start前面加一个断点,的CPUview中看到的是

lea ebx,[eax+$07]

说明Start返回值在EAX中
Syant J. Wang


阿发伯 2007-11-24
  • 打赏
  • 举报
回复
加注释的部分可以不要,有个无返回值警告可以不理

DWORD __stdcall Start()
{
// DWORD rs;
asm{
CALL @@1
@@1:
POP EAX
SUB EAX, 5
// MOV rs, EAX
}

// return rs;

}
ideation_shang 2007-11-24
  • 打赏
  • 举报
回复
没错 DWORD应该是eax
jiju 2007-11-24
  • 打赏
  • 举报
回复
1.返回call指令地址到eax
2.功能来说是一样的,不过好象vc没有这种标号写法...记不清了,如果能编译,算我没说.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧