私は本「Hacking: The Art of Exploitation」の例に従っていますが、本とは異なる結果が得られています。
この例の strcpy() 関数は、次のような命令にコンパイルされるようです。
0x802384c5 <main+27>: call 0x80482C4 <strcpy@plt>
一方、同じプログラムをコンパイルすると、ライブラリへの呼び出しが削除され、一連の mov 命令に置き換えられます。
0x8048475 <main+25>: mov DWORD PTR [eax],0x6c6c6548
0x804847b <main+31>: mov DWORD PTR [eax+0x4],0x6f57206f
0x8048482 <main+38>: mov DWORD PTR [eax+0x8],0x21646c72
0x8048489 <main+45>: mov WORD PTR [eax+0xc],0xa
コンパイラがさまざまな最適化を行うことができることは理解していますが、それがデフォルトですが、最適化を防ぐための -O0 を指定してコンパイルしようとさえしました。
外部ライブラリを参照するようにコードをコンパイルするにはどうすればよいですか?
私はユニ以来 C やアセンブリを行っていないので、優しくしてください :)