AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1533352
Accepted
user2027685
user2027685
Asked: 2024-11-20 00:32:45 +0800 CST2024-11-20 00:32:45 +0800 CST 2024-11-20 00:32:45 +0800 CST

Por que adicionar e excluir um caractere com nano em um executável em /bin produz um erro de segmentação?

  • 772

Pelo que entendi, /bintemos alguns executáveis ​​binários que são apenas programas C compilados. Por curiosidade, decidi brincar com eles e abri lscom sudoprivilégios usando nano, e adicionei o caractere 0no início. Salvei o arquivo e, para minha diversão, verifiquei que, de fato, executar o lscomando em um terminal não funciona.

O que eu não esperava é que depois de excluir esse caractere que adicionei, o lscomando continuasse não funcionando e apresentando falhas de segmentação.

Se os arquivos contidos nele /binnão são nada além de código de máquina com uns e zeros, por que excluir um caractere que adicionamos anteriormente não produz um programa que funciona?

command-line
  • 2 2 respostas
  • 1889 Views

2 respostas

  • Voted
  1. Best Answer
    muru
    2024-11-20T01:05:25+08:002024-11-20T01:05:25+08:00

    Editar um arquivo binário com um editor destinado a texto pode ou não funcionar - na prática, geralmente não funciona. O editor pode fazer várias alterações, como corrigir terminações de linha (por exemplo, se uma sequência de bytes no arquivo continha \r\n, o editor pode "consertar" isso para \n, ou corrigir ocorrências de apenas \npara \r\n), adicionar uma nova linha final se o arquivo não terminasse com uma, etc. Há uma grande probabilidade de que o lsbinário tenha sido corrompido por algumas dessas alterações. Você pode comparar a saída de od -cou hexdumpnos arquivos originais e modificados para ver o que mudou, exatamente. E considere usar um editor hexadecimal no futuro ( Por favor, recomende um editor hexadecimal para shell ) para editar arquivos que não sejam de texto.

    • 22
  2. jpa
    2024-11-20T16:46:41+08:002024-11-20T16:46:41+08:00

    Repetir seu experimento e então comparar com o original binwalkmostra que o motivo é de fato a conversão do caractere 0x0D(CR) para 0x0A(LF):

    $ binwalk -Wi teste /bin/ls
    
    Teste OFFSET /bin/ls
    -------------------------------------------------- ------------------------------
    *
    0x00000190 02 00 00 00 06 00 00 00 58 0D 02 00 00 00 00 00 00 |........X.......| \ 02 00 00 00 06 00 00 00 58 0A 02 00 00 00 00 00 |........X.......|
    *
    0x000015B0 01 00 0D 00 03 00 03 00 03 00 03 00 03 00 03 00 |................| / 01 00 0A 00 03 00 03 00 03 00 03 00 03 00 03 00 03 00 |................|
    *
    0x00001660 43 05 00 00 10 00 00 00 94 91 96 06 00 00 0D 00 |C...............| \ 43 05 00 00 10 00 00 00 94 91 96 06 00 00 0A 00 |C...............|
    

    Provavelmente um desses bytes era parte de um endereço de memória ou uma instrução envolvida na criação de um endereço. Endereço de memória inválido resulta então na falha de segmentação.

    Quando você abre o arquivo, o nano informa isso como (Converted from Mac format).

    Você pode desabilitar essa conversão e a adição de uma nova linha final dando as opções de linha de comando nano -LN. Com essas opções, o resultado é idêntico ao original, mas editar arquivos binários dessa forma ainda é propenso a corrupção.

    • 17

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve