加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在C中返回void *指针?

发布时间:2020-12-16 10:23:41 所属栏目:百科 来源:网络整理
导读:基本上我需要知道从C函数返回时寄存器void *指针的位置.我有这个代码: void* kmalloc(unsigned int size){ asm("mov %[size],%%esi" : /* no outputs */ : [size] "m" (size) : "esi"); asm("movl $9,%eax"); asm("int $0x80");} 应该将地址放入EAX.我认为C
基本上我需要知道从C函数返回时寄存器void *指针的位置.我有这个代码:

void* kmalloc(unsigned int size)
{
    asm("mov %[size],%%esi"
    : /* no outputs */
    : [size] "m" (size)
    : "esi");
    asm("movl $9,%eax");
    asm("int $0x80");

}

应该将地址放入EAX.我认为C中的返回值存储在EAX中,但显然不是,(哦,我正在使用GCC BTW).我需要一些如何返回EAX,寄存器int将无法工作,因为编译器设置.是否有用于返回指针的寄存器?或者它是否像被推入堆栈或什么?

解决方法

这不是编写内联asm的有效方法.即使您将返回值放在正确的寄存器中,它也可能在函数实际返回时丢失/破坏,因为编译器可以添加任意的结尾代码.您必须使用输出约束和return语句来返回内联asm的结果:

void* kmalloc(unsigned int size)
{
    void *p;
    asm("int $0x80" : "=a"(p) : "S"(size),"a"(9));
    return p;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读