Как переопределить функции запуска c ++ для статических двоичных файлов? - PullRequest
0 голосов
/ 10 июня 2018

Трюк LD_PRELOAD может помочь для динамического связывания двоичных файлов во время выполнения, но не удастся для статически связанного двоичного файла.

Я хочу переопределить некоторые функции запуска c ++ (например, изменение кода для __libc_start_main, __libc_csu_init и несколько других).Я думал об изменении кода напрямую с glibc, но я хочу быть уверен, что нет другого способа добиться успеха.

Есть ли другой способ переопределить функции запуска c ++, кроме изменения кодаот glibc и строим его снова?

1 Ответ

0 голосов
/ 10 июня 2018

В зависимости от того, что вы хотите исключить, вам понадобятся -nostartfiles, -nodefaultlibs или -nostdlib.Затем вы добавите свои собственные замены.Если ваша замена будет неполной (вероятно), вы добавите оригинальные библиотеки, такие как glibc после вашей собственной.Компоновщик использует их в указанном порядке, поэтому ваши переопределения теперь получают предпочтения.

Библиотеки с неявными связями действуют так, как будто они появились первыми, поэтому вам необходимо специально исключить их, а затем добавить их обратно.См. Также g ++, статическая инициализация и -nostdlib

...