Pular para o conteúdo

Tentando executar ./programa [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Tentando executar ./programa [RESOLVIDO]

Enviado em 06/11/2017 - 02:08h

Gosto da praticidade de usar meu pendrive com meus materiais de estudo em qualquer lugar!
Por exemplo: atualmente estou estudando Linguagem C.
ao tentar $ ou # /media/user/pendrive$ ./programa ...
O aviso bash: ./programa: Permissão negada , aparece no shell...
Sei que essa questão é recorrente mas não vi nada em lugar nenhum com uma solução razoável.
Tentei mudar o meu pendriver para FAT32...
Desde já agradeço!

<usa Ubuntu 16>

Responder tópico

2. Re: Tentando executar ./programa

Enviado em 06/11/2017 - 05:06h

Provavelmente o problema é que o arquivo compilado não fica com permissão de execução quando é colocado no pendrive. Se o pendrive estiver formatado como FAT32 ou NTFS, as permissões normais do POSIX podem não estar disponíveis nos arquivos (o que é bom para evitar acidentes).

Para alguns (talvez não todos) executáveis compilados com bibliotecas dinâmicas, você pode executá-los passando como argumentos para o ld.so.

$ ls -l hello
-rw-r--r-- 1 paulo1205 users 8600 Nov 6 05:05 hello
$ ./hello
bash: ./hello: Permission denied
$ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ./hello
Hello, World.

3. Re: Tentando executar ./programa [RESOLVIDO]

Enviado em 10/11/2017 - 02:56h

paulo1205 escreveu:

Provavelmente o problema é que o arquivo compilado não fica com permissão de execução quando é colocado no pendrive. Se o pendrive estiver formatado como FAT32 ou NTFS, as permissões normais do POSIX podem não estar disponíveis nos arquivos (o que é bom para evitar acidentes).

Para alguns (talvez não todos) executáveis compilados com bibliotecas dinâmicas, você pode executá-los passando como argumentos para o ld.so.

$ ls -l hello
-rw-r--r-- 1 paulo1205 users 8600 Nov 6 05:05 hello
$ ./hello
bash: ./hello: Permission denied
$ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ./hello
Hello, World.
Nossa!! É disso que eu tava falando! Perfeito!! Muito obrigado meeeesmo! =]
.
Agora: o que é esse arquivo "ld-linux-x86-64.so.2" ??? Por que a execução dele libera a execução de uma programa em uma mídia externa?

<usa Ubuntu 16>

4. Re: Tentando executar ./programa

Enviado em 10/11/2017 - 19:02h

ld.so é o módulo que carrega as bibliotecas dinâmicas num executável que tenha sido gerado de modo a usar bibliotecas dinâmicas.

Quando você dispara um programa com bibliotecas dinâmicas, o sistema tem de chamar o ld.so de qualquer maneira, de modo a identificar quais as bibliotecas de que o programa depende, carregar tais bibliotecas, e resolver os endereços de cada objeto dinâmico que ainda não esteja mapeado por quem faz uso dele.

No Linux, o ld.so foi feito não apenas como um módulo que o SO invoca implicitamente, como decorrência da execução de um programa com ligações dinâmicas, mas também como um executável que o próprio usuário pode chamar diretamente, passando o nome do programa como argumento. O seu caso é um exemplo da utilidade desse tipo de implementação.

Em sistemas que suportam múltiplos formatos de arquivos executáveis, o ld.so acaba sendo renomeado para um nome mais complexo, que explicita qual dos formatos será suportado por essa versão do ld.so. No seu caso, você usou a versão de ld.so voltada à arquitetura x86_64, nativa para Linux (se você usasse uma emulação de Solaris ou Hurd, por exemplo, poderia ser necessário outra versão de ld.so), versão 2. Por isso esse nome.

5. Explicação perfeita!

Enviado em 25/11/2017 - 22:07h

Paulo, muito obrigado por suas informações! Você foi ótimo!
Espero que isso sirva para ajudar outros estudantes também!
Obrigado!!

#usa Ubuntu 14 / Kali Linux

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder