苦しいです。毎度。
今回もヘンなコードで悩まされています。
「たのしいバイナリ」のあるコードの一部分なのですが、
unsigned long get_sp(void)
{
__asm__("movl %esp,%eax);
}
ん??
「この関数おかしくね?」とまだまだ初心者である私は思うわけです。
「戻り値の型がunsigned longなのにこの関数から呼び出し元に戻される値がない。というかreturn文がない」
案の定、コンパイルしようと思ったらエラーが出ましたね。
warning: control reaches end of non-void function [-Wreturn-type]
}
^
明らかに「return文書いて戻り値を設定しろ」ってことですよね。
しかし、この関数の戻り値に何を設定すればいいのか。。。。。
この関数を使っているのがほかのサブルーチンの「int cpy(char *str)」という関数の中で、
printf("0x%08lx",get_sp() + 0x10);
という風に使われているんですよね。
……というかなんかこのままで本では話が進んで行ってるw
エラー出たままでいいってというのもなんだかしっくりこないけど、こんなもんなのかねぇ。。。