Return value of a C function to ASM

淺唱寂寞╮ 提交于 2019-12-04 17:48:05

问题


I'm trying to call a function from within ASM. I know how to call it, but i'm having trouble finding how to get the return value of this function. An example follows:

C code:

int dummy() {  
    return 5;  
}  

(N)ASM code:

dummyFunction:
    call dummy
    ;grab return into eax
    inc eax ; eax should be 6 now
    ret  

Any ideas?


回答1:


The return value is in eax. If you've called a C function from asm, you can read the return value from eax. If you're trying to return from an asm function to C, store the intended return value in eax.

Things get a little bit more complicated for returning floating point values, long long values, or structures, so ask if you need that and someone (maybe me) will help you.




回答2:


Although the answers are sufficient to answer the OP's question, here's an extract covering most cases from DJPP's manpage for completeness:

Return Value

  • Integers (of any size up to 32 bits) and pointers are returned in the %eax register.
  • Floating point values are returned in the 387 top-of-stack register, st(0).
  • Return values of type long long int are returned in %edx:%eax (the most significant word in %edx and the least significant in %eax).
  • Returning a structure is complicated and rarely useful; try to avoid it. (Note that this is different from returning a pointer to a structure.)

If your function returns void (e.g. no value), the contents of these registers are not used.




回答3:


It depends on the platform and the calling convention, but usually, the return value should already be returned in eax if it's a primitive type or pointer and in the floating point register st(0) if it's a floating point type, I think.



来源:https://stackoverflow.com/questions/6171172/return-value-of-a-c-function-to-asm

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!