我正在按照《黑客:剥削的艺术》一书中的示例进行操作,但我得到的结果与这本书不同。
似乎示例中的 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 语言或汇编语言,所以对我温柔点:)
最佳答案
使用 GCC,您可以使用 -fno-builtin
(禁用所有内置)或 -fno-builtin-strcpy
(仅禁用内置 strcpy
).
关于c - 如何防止 strcpy() 被优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059044/