Кира (kramer) wrote,
Кира
kramer

Category:
Еще к вопросу о размножении бляшконосных, или хитонов зависимостях от символов из GLIBC. Способ явного указания в исходнике с помощью .symver не сработает при статической линковке к библиотеке, которая использует символ без явного указания версии - линкер просто подставит текущую версию, имеющуюся в системе. Чтобы обойти это, можно использовать следующий финт ушами. Линкеру нужно передать параметр -Wl,--wrap=memcpy, а в исходнике определить wrapper и версию символа, которую он использует:

__asm__(".symver __real_memcpy, memcpy@GLIBC_2.2.5");

extern "C" {
void *__real_memcpy(void *dest, const void *src, size_t n);
void *__wrap_memcpy(void *dest, const void *src, size_t n)
{
    return __real_memcpy(dest,src,n);
}
}

Линкер, по соглашению, заменит все вызовы memcpy на __wrap_memcpy, а вызовы __real_memcpy на вызовы memcpy, версия которого указана явно с помощью .symver. Вот такая вот арифметика. Чтоб вашему Гранлюнду до конца жизни икалось - развели, суки, семантический огород.

Tags: linux, хозяйке на заметку
Subscribe

  • (no subject)

    Jack White is so sick that he almost makes Michael Jackson appear normal.

  • (no subject)

    Раньше в Ленте.ру при освещении миролюбивой внешней политики КНДР словосочетания вроде "беспощадный предупреждающий удар" брали в кавычки.…

  • (no subject)

    You might ask, “Why would someone write code in a grotesque language that exposes raw memory addresses? Why not use a modern language with…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments