일반적으로 실행 파일을 편집하면 큰 파일인 한 바이너리가 cat
이상한 문자가 포함된 제목이 계속 변경되는 것을 볼 수 있습니다 . 접두사는 보이지 않습니다. application
이해를 돕기 위해.STDOUT
strace
무슨 일이 있어서 이런 일이 일어났나요? 그냥 궁금해서요.
답변1
그럴 것 같지는 않지만 PuTTY는 다음에 대한 응답으로 이 작업을 수행했습니다.콤비네이션성격.
PuTTY는 (를 통해) 많은 것을 인식합니다.no
방법모두) xterm
Linux 콘솔과 덜 친숙한 터미널에서 사용되는 이스케이프 시퀀스입니다. 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(8진수
235
)
그 뒤에 0, 1, 2, 21(ASCII 번호) 또는 L,
세미콜론,
그리고 제목텍스트,
다음 선택 사항 중 하나로 끝납니다.
- ANSI 7비트 문자열 종결자( escape\) 또는
- ANSI 8비트 문자열 종결자(8진수
234
) 또는 - ASCII BEL(7, xterm에서 사용)
그런데 ASCII 캐리지 리턴이나 줄 바꿈이 표시되면 헤더 이스케이프 처리가 중지됩니다.
"대형" 파일은 임의적으로 보일 수 있지만 테이블 등의 형태에 약간의 차이가 있을 수 있습니다. 그렇지 않으면 그렇지 않습니다자꾸설명된 대로 제목을 업데이트합니다.
터미널을 재설정(또는 완전히 중지)하지 않고도 찾을 수 있도록 잠재적인 헤더 문자열을 감지하는 프로그램을 구축하는 것은 흥미로울 수 있습니다.
추가 자료:
답변2
strace
대역 내 컨트롤이기 때문에 자체적으로 표시되지 않습니다 .
PuTTY 외부에서는 일반적으로 프롬프트가 중단되는 것으로 간주됩니다. 예:바이너리 표시 후 터미널 수정
이를 이스케이프 시퀀스라고 합니다. 즉, "escape"라는 문자로 시작하는 문자 시퀀스로 표현되는 명령입니다. clear
는 이를 사용하는 간단한 예입니다.
- https://en.wikipedia.org/wiki/Escape_sequence
- https://en.wikipedia.org/wiki/Escape_sequence#ASCII_video_data_terminals
대역 내 제어는 설계 결함으로 간주될 수 있으며 이는 심각한 문제를 야기할 수 있습니다.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비트 코드를 정의하여 수행됩니다. 분명히 UTF-8과 호환되지 않는 ASCII만 가정합니다. 원천:SSH 및 텔넷을 통해 터미널 길이와 너비는 어떻게 전달됩니까?
답변3
무슨 일이 일어나고 있는지는 바이너리에 창 제목을 설정하는 데 사용되는 이스케이프 시퀀스가 포함되어 있다는 것입니다( xterm
s에서는 이고 <esc>]2
퍼티에서는 다른지 모르겠습니다).