GCC вызывает __fn_chk для получения и установки, как я могу напрямую вызывать небезопасные функции? - PullRequest
0 голосов
/ 07 ноября 2018

Несмотря на вызовы gets и printf, похоже, что GCC вместо этого отправляет на

call sym.imp.__gets_chk
call sym.imp.__printf_chk

У меня есть другой двоичный файл, который мне дали - я не скомпилировал его. Он также снова связывается /lib/i386-linux-gnu/libc.so.6 и вызывает функции напрямую. Как я могу связать эти функции напрямую, не связываясь с символом _chk?

Я пробовал с и без -fno-chkp-use-wrappers.


Текущие параметры сборки

-m32 -fno-stack-protector -std=c89 -fno-PIE -no-pie -Os -mpreferred-stack-boundary=2 -fno-chkp-use-wrappers

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Благодаря помощи Занятого русского языка Я нашел решение, добавил

-D_FORTIFY_SOURCE=0

На мои варианты в GCC. Оказывается, это возможно только при использовании -O. В моем случае я использовал -Os, и это включило его!

0 голосов
/ 07 ноября 2018

Как я могу ссылаться на эти функции напрямую, без ссылки на символ _chk?

Вы не можете: вы должны перекомпилировать этот код без -fstack-protector.

У меня явно есть -fno-stack-protector

Ну, что-то в вашей среде определяет __USE_FORTIFY_LEVEL > 0.

Вы можете предварительно обработать ваш источник с помощью:

gcc -m32 -fno-stack-protector -std=c89 -fno-chkp-use-wrappers -dD -E stack0.c

и убедитесь, что __USE_FORTIFY_LEVEL действительно определено, и выясните, откуда это исходит.

...