2012-05-21 3 views
2

Скажите, я хочу изменить mmap. Поэтому для этой цели я создаю новый файл общих объектов и использую LD_PRELOAD, чтобы использовать его вместо оригинала mmap. Однако мне нужно обратиться к переменной, которая является моими программными файлами. Как я могу это сделать? Я где-то читал о слабых ссылках. Это способ сделать это. Я не думаю, что вы можете использовать extern, потому что вы компилируете общую библиотеку отдельно, чем ваша программа. Любые советы по этому поводу?LD_PRELOAD и внешние переменные

Во-вторых, делает LD_PRELOAD влияет только на использование mmap в коде, или же, например mmap вызывается из стандартной библиотеки libc.so, который использует ваш код?

+0

У вас есть источник вашей программы? Если да, то почему вы хотите использовать 'LD_PRELOAD' вместо перезаписи' mmap() '? – dwalter

ответ

2

Использование LD_PRELOAD повлияет любой вызов функции, которая должна быть расположена динамически, независимо от того, находится ли он в собственном коде или в общей библиотеке загруженного кода. Вы можете использовать LD_DEBUG, чтобы увидеть, где именно находятся символы. Посмотрите на:

$ LD_DEBUG=help ls 

Это покажет вам доступные варианты отладки. Обратите внимание, что здесь ls может быть любым динамически связанным исполняемым файлом.

Я не совсем уверен в первой части вашего вопроса. Вы пытались использовать dlsym() для поиска переменной?

Смежные вопросы