如何防止strcpy()被优化

时间:2012-10-24 22:51:28

标签: c gcc assembly

我在“黑客:剥削的艺术”一书中有一个例子,我对这本书的结果不尽相同。

示例中的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或集会,所以请对我温柔:)

1 个答案:

答案 0 :(得分:7)

使用GCC,您可以使用-fno-builtin(禁用所有内置内容)或-fno-builtin-strcpy(只需禁用内置strcpy)。