Pergunta

Pode alguém aqui me dizer se existe algo semelhante a LD_PRELOAD em versões recentes do AIX? Mais especificamente eu preciso para chamadas de interceptação do meu binário para time (), retornando um tempo constante, para fins de teste.

Foi útil?

Solução

AIX 5.3 introduziu o LDR_PRELOAD (para programas de 32 bits) e LDR_PRELOAD64 (para programas de 64 bits) variáveis. Eles são análogo pela LD_PRELOAD em Linux. Ambos são listas separadas por dois pontos de bibliotecas e símbolos serão preventivamente carregado a partir dos objetos compartilhados listados antes de mais nada.

Por exemplo, se você tem um foo.so objeto compartilhado:

 LDR_PRELOAD=foo.so

Se você usar arquivos, usar o estilo AIX para especificar o objeto dentro do arquivo:

 LDR_PRELOAD="bar.a(shr.so)"

E várias entradas separadas com dois pontos:

 LDR_PRELOAD="foo.so:bar.a(shr.so)"

Outras dicas

AIX 5L usa a variável LDR_PRELOAD.

Não que eu estou ciente de. Mais próximo coisa que fizemos (com malloc / free para depurar) é

  • criar um novo arquivo de biblioteca com apenas as funções desejadas (mesmo nome original).
  • lugar-lo em um diretório diferente do original.
  • fazer uma dependência do nosso arquivo de biblioteca ao original.
  • mudar o LD_LIBRARY_PATH (ou SHLIB_PATH?) Para colocar nossa biblioteca primeiro na cadeia de pesquisa.

Dessa forma, nossas funções foi pego pela primeira vez pelo carregador, qualquer que não forneceu foram fornecidos pelo original.

Este foi um tempo atrás. AIX 5L é suposto ser muito mais como Linux (daí o L) para que ele pode ser capaz de fazer exatamente o que você precisa.

Como alternativa, se você tiver a fonte, munge as chamadas para o tempo () com Mytime () e fornecer a sua função. Você não está testando exatamente o mesmo software, mas as diferenças para esse tipo de alteração mínima não deve importar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top