如何防止strcpy()被优化
我在“黑客:剥削的艺术”一书中有一个例子,我对这本书的结果有所不同。
似乎示例中的strcpy()函数编译为如下指令:
0x802384c5 : call 0x80482C4
而当我编译相同的程序时,它会删除对库的调用,并用一系列mov指令替换它:
0x8048475 : mov DWORD PTR [eax],0x6c6c6548 0x804847b : mov DWORD PTR [eax+0x4],0x6f57206f 0x8048482 : mov DWORD PTR [eax+0x8],0x21646c72 0x8048489 : mov WORD PTR [eax+0xc],0xa
我知道编译器可以进行各种优化,但即使它是默认值,我甚至尝试用-O0编译它,这应该是为了防止优化。
如何编译代码以便引用外部库?
自从大学以来,我没有做任何C或组装,所以请对我温柔:)
使用GCC,您可以使用-fno-builtin
(禁用所有内置函数)或-fno-builtin-strcpy
(只需禁用内置strcpy
)。