Как не использовать -wrap для всех связанных библиотек? - PullRequest
3 голосов
/ 11 марта 2020

Моя программа использует несколько предварительно скомпилированных библиотек stati c. Я упаковываю mallo c и бесплатно, но я хочу, чтобы одна из связанных библиотек использовала 'real' mallo c и бесплатно. При запуске:

gcc [...] -W1, --wrap=malloc -W1, --wrap=free [used libraries]

все библиотеки будут использовать упакованные функции.

Есть ли частичное связывание здесь? Что если я динамически свяжу эту библиотеку?

Заранее спасибо, Яцек

1 Ответ

1 голос
/ 12 марта 2020

Вы сможете достичь этого с помощью некоторых эльфийских хитростей в ваших двоичных библиотеках c.

Предположим, что ваша библиотека называется libbar.a. Затем вы можете изменить все вызовы на malloc() на __real_malloc() с помощью objcopy:

objcopy libbar.a --redefine-sym malloc=__real_malloc --redefine-sym free=__real_free libbar2.a

Теперь, если вы связываете скопированный (модифицированный) libbar2.a вместо libbar.a оригинал (не завернутый) malloc() и free() должны называться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...