Como fazer meu ELF funcionar com versões novas e antigas do glibc?

3

Quando eu estou compilando meu elf, é uma "melhor prática" fazer um link com a versão mais antiga do glibc que eu posso, então ele funcionará tanto em versões novas quanto antigas da glibc.

i.e. se eu usar realpath, que em readelf output de glibc podemos ver tem uma versão GLIBC_2.0 e uma versão GLIBC_2.3, eu quero usar a versão antiga para que meu ELF trabalhe na glibc 2.0 / 1/2.

Mas a versão GLIBC_2.3 provavelmente foi desenvolvida e atualizada desde que foi publicada, e eu acho que a versão GLIBC_2.0 não mudou desde que o glibc 2.3 foi publicado. Então, eu acho que eu quero que o meu elf use a versão GLIBC_2.3 quando estiver presente, e quando não, para retornar à versão GLIBC_2.0.

É possível? Ou o que eu não entendo?

    
por speller 22.02.2015 / 20:46

1 resposta

0

Eu nunca ouvi falar de tal prática, muito menos chamando-a de uma prática melhor . A coisa mais próxima que posso pensar é que, se você olhar para o malware ELF, ele é frequentemente compilado contra versões realmente antigas do kernel do Linux e versões antigas da libc. No entanto, não tenho certeza se isso é uma "melhor prática".

Eu não acho que uma alternativa explícita seja possível, dado como o Linux obtém um executável ELF na memória. Tudo o que o kernel faz é mapear as seções do arquivo ELF na memória, de acordo com PT_LOAD Pheaders do arquivo. O Linux também mapeia no "interpretador", que geralmente é /lib/ld-linux.so.2 ou /lib64/ld-linux-x86-64.so.2 . Esse interpretador faz parte da libc e é responsável por fazer qualquer link dinâmico com libc.so ou qualquer outro objeto compartilhado.

Um arquivo ELF é vinculado a qualquer objeto compartilhado disponível, por isso escrevi que nenhuma opção de versão explícita é possível. Tudo depende do intérprete ELF.

    
por 23.02.2015 / 05:35