基本的に、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 も機能しません。ポインタを返すために使用されるレジスタはありますか? それとも、スタックにプッシュされたようなものですか?