@brbwk

Почему нет записи о printf в секции .plt.dyn?

Написал функцию, где вызываю printf. Скомпилировал все в либу. Разобрал ее как elf образ и добрался до секции rela.plt. Но там запись о функции puts, а не printf. Возможно это потому, что printf лишь функция форматирования строки и она потом в себе вызывает puts, но на каком этапе заменяется тогда printf на puts? Причем если сделать дамп кода ассемблеру: gcc -S src.c -o src.s, то там будет call printf@plt, шо за нах как говорится? Значит она должна быть в таблице.
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Но там запись о функции puts, а не printf.

Это уже оптимизация компилятора. Возможно ты не передаешь printf никаких аргументов и он решил, что проще вызвать puts.
Такое поведение уже было описано вот тут:
The C compiler gcc likes to use its knowledge of builtin functions to manipulate code. The version of gcc in NetBSD 4.0.1/macppc will simplify the printf statement to puts("Greeting, Earth!"); so the main function effectively calls puts(3) once and then returns 0.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы