@brbwk

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

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

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:24
3000 руб./за проект
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект