为什么执行可执行文件时 PuTTY 的标题会不断变化?

为什么执行可执行文件时 PuTTY 的标题会不断变化?

通常可以看到,如果一个可执行文件被cat编辑,只要它是一个巨大的文件,它就会不断地改变“PuTTY”的标题,直到用那些奇怪的字符application将二进制文件打印到“PuTTY”上,前缀似乎对了解没有帮助。STDOUTstrace

到底发生了什么,导致了这种情况的发生?只是好奇。

答案1

尽管看起来不太可能,PuTTY 这样做是为了响应组合的字符。

PuTTY 可以识别很多(通过no方法全部)用于xtermLinux 控制台和一些不太熟悉的终端的转义序列。 PuTTY 的一位开发人员编制了一份所有可能感兴趣的列表,大约有 650 项。您可以在这里和那里找到名为“全部转义.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 <[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

无论出于何种原因,他们不喜欢直接参考 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 回车或换行,它将停止处理标题转义。

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

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

进一步阅读:

答案2

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

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

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

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

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

有一个串行信号称为“休息”。然而,“中断条件”通常仅用于一种目的。照其描述,听起来传输时间比普通字符要长。

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

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

答案3

发生的情况是,您的二进制文件恰好包含用于设置窗口标题的转义序列(在xterms 中,它是<esc>]2,我不知道它在 putty 中是否不同)。

相关内容