4

私は本「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 やアセンブリを行っていないので、優しくしてください :)

4

1 に答える 1

8

GCC では、-fno-builtin(すべてのビルトインを無効にする) または-fno-builtin-strcpy(ビルトインを無効にするだけ) を使用できますstrcpy

于 2012-10-24T23:51:16.033 に答える