Por que chamar um executável continua mudando o título do PuTTY?

5

Geralmente se vê que se um executável é cat ed, desde que seja um arquivo enorme, ele continua alterando o título do 'PuTTY application até que seja feito a impressão do binário para o STDOUT com aqueles caracteres estranhos, prefixo strace não parece ajudar em saber.

O que acontece lá, o que faz isso acontecer? Apenas curioso.

    
por Keyshov Borate 14.07.2016 / 15:31

3 respostas

6

Por mais improvável que pareça, o PuTTY faz isso em resposta a uma combinação de caracteres.

O PuTTY reconhece muitos (por no meios todos ) das seqüências de escape usadas para xterm , console Linux e alguns terminais menos familiares. Um dos desenvolvedores do PuTTY compilou uma lista de todos os que podem ser de interesse, cerca de 650 itens. Você pode encontrar cópias aqui e ali com o nome "all-escapes.txt" , começando assim:

# This file is hoped to document all the escape sequences supported by
# terminals that are vaguely compliant with ECMA-48 and friends.

# Changes should be submitted to <[email protected]>

# It includes everything from:
# <URL:http://www.cs.utk.edu/~shuford/terminal/dec_vt220_codes.txt> 1999-05-16
# <URL:http://www.cs.utk.edu/~shuford/terminal/vt100_reference_card.txt>
#                                   1993-02-01
# <URL:http://www.cs.utk.edu/~shuford/terminal/vt100_codes_news.txt>1998-09-18
# <URL:http://www.cs.utk.edu/~shuford/terminal/ansi_dec_controls_news.txt>
#                                   1999-05-16
# <URL:http://www.cs.utk.edu/~shuford/terminal/xterm_controls.txt>  1999-10-12
# <URL:http://www.cs.utk.edu/~shuford/terminal/color_control_news.txt>
#                                                                   1999-11-13
# ECMA-48 5th Ed. control functions (section 8.3, annex F)
# Linux console_codes(4)
# SunOS 5.7 wscons(7D)
# UnixWare 7 display(7)
# IRIX 6.5.5 xwsh(1G)
# VT220 Reference manual (<URL:http://vt100.net/docs/vt220-rm/>, EK-VT220-RM)
# <URL:http://vt100.net/ctrlseq_dec.html>                           1999-11-24
# <URL:http://vt100.net/ctrlfunc_dec.html>                          1999-12-01
# <URL:http://www.wyse.com/service/support/kbase/SEQwt.asp?Q=9> (wy75)
#                                                                   1999-07-19
# <URL:ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/rbcom346.zip#TERM-EMU.DOC>
#                                                                   1999-09-13
# <URL:http://www.itscj.ipsj.or.jp/ISO-IR/2-1.htm>                  1999-04-19
# <URL:http://www.itscj.ipsj.or.jp/ISO-IR/2-2.htm>                  2004-09-27
# <URL:http://www.itscj.ipsj.or.jp/ISO-IR/2-3.htm>          2004-09-27
# <URL:http://www.itscj.ipsj.or.jp/ISO-IR/2-8-1.htm>                1999-04-19
# <URL:http://www.itscj.ipsj.or.jp/ISO-IR/2-8-2.htm>                2001-05-10
# iBCS2 description in ESR's termtypes.master version 10.2.7
# Reflection Terminal Reference Manual for ADDS, ANSI, DG, VT, WYSE, and
#       Unisys Hosts; Version 7.0; September 1998; published by WRQ Inc.
# DEC Terminals and Printers Handbook 1985 EB 26291-56 (Appendices C, E, and G)
# OpenServer 5.0.6 screen(HW)
# X Consortium Compound Text Encoding Version 1.1

Por qualquer motivo, eles não gostaram da referência direta à documentação para Linux e xterm, mas usaram fontes secundárias.

As cadeias de título reconhecidas pelo PuTTY começam com uma destas opções:

  • OSC ANSI de 7 bits ( escape ] ) ou
  • OSC ANSI de 8 bits (octal 235 )

seguido por 0 , 1 , 2 , 2 1 (ASCII dígitos) ou L ,

um ponto e vírgula,

e o título texto ,

e termine com uma destas opções:

  • Terminador de cadeia ANSI de 7 bits ( escape \ ) ou
  • Terminador de Cadeia ANSI de 8 bits (octal 234 ) ou
  • ASCII BEL (7, usado pelo xterm)

Como um aparte, ele parará de processar a saída do título se ele vir um retorno de carro ASCII ou alimentação de linha.

Embora um arquivo "grande" possa parecer aleatório o suficiente, é provável que seu arquivo contenha algum viés na forma de tabelas, etc. Caso contrário, repetidamente atualizará o título conforme descrito.

Pode ser interessante construir um programa que detecte cadeias de títulos latentes, para que você possa encontrá-las sem precisar redefinir seu terminal (ou possivelmente pará-lo completamente).

Leitura adicional:

por 14.07.2016 / 22:21
5

Ele não aparece separadamente em strace porque é um controle dentro da banda.

Fora do PuTTY, isso é percebido como uma forma de corromper o prompt. Exemplo: Corrigir o terminal depois de exibir um arquivo binário

Eles são chamados de seqüências de escape - comandos expressos como uma seqüência de caracteres, que começam com o caractere "escape". clear é um exemplo simples que os utiliza.

Controles dentro da banda podem ser considerados uma falha de design; isso abre a porta para problemas sérios. link (Mais geralmente - redes telefônicas automatizadas precoces usado controles dentro da banda para roteamento, o que permitia o controle por hackers; por exemplo, link ).

Pode ser útil lembrar que o nome completo de uma janela de terminal é um "emulador de terminal". Os terminais físicos não possuem controle fora de banda. As linhas seriais físicas passam fluxos de bytes (7 ou 8 bits).

Existe um único sinal em série chamado "break" . No entanto, a "condição de quebra" geralmente é usada apenas para uma finalidade. Do jeito que é descrito, parece que levaria mais tempo para transmitir do que um personagem normal.

(A falha de design pode ser resolvida, por exemplo, se não houver caracteres imprimíveis por padrão. Emulando uma impressora sem controles adicionais.Compare a inserção de um parágrafo de texto em um modelo HTML: você precisa manipular os caracteres &<> especialmente para evitar que eles desapareçam e sejam executados como código).

Note que as portas seriais físicas têm a desvantagem de não comunicar a largura e a altura do terminal :). Os terminais físicos seriam um tamanho definido e não acho que eles tendessem a implementar consultas como essa. As janelas de terminal implementaram uma solução alternativa para isso (elas enviam o SIGWINCH, que eu suponho ser um sinal para verificar alguma extensão PTY ). O SSH tem algum recurso que também é transmitido. Curiosamente, o controle do protocolo telnet para isso é descrito como in-band. Isso foi feito definindo um número de códigos de 8 bits. Ele assume apenas o ASCII, ou seja, é aparentemente incompatível com o UTF-8. Fonte: Como são o comprimento e a largura dos terminais encaminhado por SSH e telnet?

    
por 14.07.2016 / 15:46
4

O que acontece é que o seu binário contém a sequência de escape para definir o título da janela (em xterm s, é <esc>]2 , não sei se é diferente em massa).

    
por 14.07.2016 / 16:33

Tags