私はstackoverflowに慣れていないので、犯した間違いについて事前にお詫び申し上げます。
最近、このCパズルに出会いました。プログラムを以下に示します。
#include<stdio.h>
void change()
{
}
int main()
{
printf("\nHello");
change();
printf("\nHai");
printf("\nHow are you?");
return 0;
}
期待される出力は、
Hello
Hai
How are you?
この問題では、関数 change() にコードを追加して、次のように出力を変更するよう求められます。
Hello
How are you?
main() を変更することは想定されていません。
ステートメント printf("\nHai") を避けて、スタック メモリに格納されている関数 change() のリターン アドレスを変更しようとしました。しかし、gcc を使用してコンパイルするとエラーが発生します。
change() に追加したコードを以下に示します。
void change()
{
char ch;
*(&ch+10)+=20;
}
ch(10と20)に加算される値は、
objdump -d ./a.out
問題を解決するための提案をお待ちしております。どうぞよろしくお願いいたします。