为什么对可执行文件进行分类会不断更改 PuTTY 的标题?

Key*_*ate 5 putty cat

通常可以看到,如果一个可执行文件被cated,只要它是一个巨大的文件,它就会不断更改 'PuTTY 的标题,application直到它完成将二进制文件打印到STDOUT带有那些奇怪字符的 ',前缀strace似乎无助于了解。

到底发生了什么,导致了这一切?只是好奇。

Tho*_*key 6

尽管看起来不太可能,但 PuTTY 会根据字符组合执行此操作。

PuTTY 可识别用于、Linux 控制台和一些不太熟悉的终端的许多(no全部)转义序列xterm。PuTTY 的一位开发人员编制了一份包含所有可能感兴趣的项目的列表,大约 650 项。你可以在这里和那里找到名为"all-escapes.txt" 的副本,从这样开始:

# 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 <bjh21@bjh21.me.uk>

# 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
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,他们不喜欢直接参考 Linux 和 xterm 文档的概念,而是使用了辅助资源。

PuTTY 识别的标题字符串以以下选项之一开头:

  • ANSI 7 位 OSC ( escape]),或
  • ANSI 8 位 OSC(八进制235

后跟0, 1, 2, 21(ASCII 数字)或L,

一个分号,

和标题文本

并以以下选择之一结束:

  • ANSI 7 位字符串终止符 ( escape\),或
  • ANSI 8 位字符串终止符(八进制234),或
  • ASCII BEL(7,由 xterm 使用)

顺便说一句,如果看到 ASCII 回车或换行,它将停止处理标题转义。

虽然“大”文件可能看起来足够随机,但您的文件可能包含表格等形式的一些偏差。否则它不会像描述的那样重复更新标题。

构建一个检测潜在标题字符串的程序可能会很有趣,这样您就可以在无需重置终端(或可能完全停止)的情况下找到它们。

进一步阅读:


sou*_*edi 5

它不会单独显示,strace因为它是带内控件。

在 PuTTY 之外,这通常被认为会破坏提示。示例:显示二进制文件后修复终端

它们被称为转义序列 - 表示为以字符“escape”开头的字符序列的命令。 clear是一个使用它们的简单示例。

带内控制可被视为设计缺陷;它为严重问题打开了大门。https://www.proteansec.com/linux/blast-past-executing-code-terminal-emulators-via-escape-sequences/ (更普遍的是 - 早期的自动电话网络使用带内控制进行路由,允许通过黑客;参见例如http://www.mit.edu/hacker/hacker.html)。

记住终端窗口的全名是“终端模拟器”可能会有所帮助。物理终端并没有真正的带外控制。物理串行线路传递字节流(7 位或 8 位)。

有一个名为“break”的串行信号。然而,“中断条件”通常仅用于一个目的。它的描述方式听起来似乎比普通字符需要更长的时间来传输。

(设计缺陷可以解决,例如,如果默认情况下不传递不可打印的字符。模拟没有额外控件的打印机。比较将一段文本插入 HTML 模板:您需要&<>特别处理字符以避免它们消失和作为代码运行)。

请注意,物理串行端口的缺点是无法传达终端的宽度和高度 :)。物理终端将是固定大小,我认为它们不会实现任何类似的查询。终端窗口为此实现了一种解决方法(它们发送 SIGWINCH,我认为这是检查某些PTY扩展的信号)。SSH 也有一些特性可以传递这一点。有趣的是,telnet协议对此的控制被描述为带内。这是通过定义许多 8 位代码来完成的。它假定 ASCII-only,即显然与 UTF-8 不兼容。来源:终端长度和宽度如何通过 SSH 和 telnet 转发?