4

我在《黑客:剥削的艺术》一书中遵循了一个例子,我得到了不同的结果。

示例中的 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(disable all builtin) 或-fno-builtin-strcpy(just disable builtin strcpy)。

于 2012-10-24T23:51:16.033 回答