Как предотвратить оптимизацию 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, ни сборку с uni, так что будьте нежны со мной 🙂

С помощью GCC вы можете использовать -fno-builtin (отключить все встроенные функции) или -fno-builtin-strcpy (просто отключите встроенную strcpy ).