gpt4 book ai didi

c - C 中如何返回 void* 指针?

转载 作者:太空狗 更新时间:2023-10-29 15:49:01 25 4
gpt4 key购买 nike

基本上我需要知道当从 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)。我需要知道如何返回 EAX,因为编译器设置,register int 也不起作用。是否有用于返回指针的寄存器?还是像压入堆栈之类的?

最佳答案

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

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

关于c - C 中如何返回 void* 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com