当前位置: 代码迷 >> 汇编语言 >> 关于返回值的部类,生存期等
  详细解决方案

关于返回值的部类,生存期等

热度:8743   发布时间:2013-02-26 00:00:00.0
关于返回值的类型,生存期等
我在DLL里面写了一些函数,它们需要有返回值,这些返回值往往会是一些结构,于是返回结构指针。如果我使用局部变量做返回值,我再回来读这些实际结构的时候,它们会被改掉吧?我想尤其是esp啥的一变肯定玩完!
1、要返回结构只能返回指针吗,书上说都是eax来的?
2、指针指向的结构我应该声明为全局变量还是申请一块内存保存它,直接用局部变量不行吧?
3、我需要其他语言调用这些DLL,那要返回一个value DWORD ?的全局变量怎么办,写一个函数mov eax,value吗?
大家都是怎么做的啊,教教我。

------解决方案--------------------------------------------------------

不是一定要eax,某种约定而已(不用eax存返回,保证在C下返回错值)
有爱者可以去msdn看下各种调用约定,和naked属性
mov eax,OFFSET value ;OFFSET 可以忽略,不过这样表达能清楚点
然后在C中

extern "C"{
  PDWORD func();
}
....
PDWORD vararg = func();
------解决方案--------------------------------------------------------
不管你那个是什么类型,总之它就是把eax里的值传给vararg变量了,简单地说就是...你可以把它想象成任何类型...因此这样就不安全
------解决方案--------------------------------------------------------
汇编下根本就没返回值的概念...只是高级语言通过约定制造的假象而已
  相关解决方案