컴파일 오류: 프로그램의 stray '\302' 등
다음 공격 코드를 컴파일하는 데 문제가 있습니다.
http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c
"gcc file.c"와 "gcc-O2 file.c"를 사용하고 있지만, 두 가지 모두 다음과 같은 오류가 발생합니다.
sorbolinux-exec.c: In function ‘sc’:
sorbolinux-exec.c:76: error: stray ‘\302’ in program
sorbolinux-exec.c:76: error: stray ‘\244’ in program
sorbolinux-exec.c:76: error: ‘t’ undeclared (first use in this function)
sorbolinux-exec.c:76: error: (Each undeclared identifier is reported only once
sorbolinux-exec.c:76: error: for each function it appears in.)
Kali Linux와 Ubuntu 10.04(Lucid Lynx)에서 모두 컴파일을 시도해 보았는데 같은 결과가 나왔습니다.
해당 행에 잘못된 문자가 있습니다.이것이 제가 본 것입니다.
원본에 잘못된 문자가 있습니다.유효한 ASC가 없는 경우소스에 있는 II 문자는 두 개의 따옴표가 붙은 문자열 리터럴일 수 있으며 다음을 사용하여 간단히 파일을 ASCII로 변환할 수 있습니다.
tr -cd '\11\12\15\40-\176' < old.c > new.c
아이콘v를 사용하는 메서드는 잘못된 문자에서 중지되므로 의미가 없습니다.위 명령줄은 예제 파일과 함께 작동합니다.
물론입니다. 파일을 ASCII로 변환하고 유니코드 문자를 모두 날려 버립니다.아마 효과가 있을 겁니다...하지만..
- 당신이 무엇을 고쳤는지 모를 겁니다.
- 유니코드 주석도 모두 삭제합니다.예: //: A²+B²=C²
- 이는 잠재적으로 명백한 논리를 손상시킬 수 있으며 코드는 여전히 깨질 것이지만 해결책은 덜 명백합니다.예: "Smart-Quotes"(" & ")가 있는 문자열 또는 전체 너비 별표(*)가 있는 포인터입니다."SOME_THING"은 #defin(SOME_THING)처럼 보이고 *SomeType은 잘못된 유형(SomeType)입니다.
문제를 해결하기 위한 두 가지 수술적 접근법:
글꼴을 전환하여 문자를 봅니다.(현재 글꼴에서는 보이지 않을 수 있음)
정규식은 확장되지 않은 ASCII의 일부가 아닌 모든 유니코드 문자를 검색합니다.
메모장++에서는 아직 실패하지 않은 FFFF까지 검색할 수 있습니다.
[\x{80}-\x{FFFF}]
80은 128을 나타내는 16진수로, 첫 번째 확장 ASCII 문자입니다.
다음 찾기를 누르고 빈 공간으로 보이는 것을 강조 표시한 후 검색 대화상자를 닫고 +를 눌러 클립보드에 복사할 수 있습니다.
그런 다음 유니코드 검색 도구에 문자를 붙여 넣습니다.저는 주로 온라인을 이용합니다.http://unicode.scarfboy.com/
예:
어떻게든 내 코드에 총알점(•)이 있었습니다.유니코드 값은 2022(hex)이지만 컴파일러에서 ASCII로 읽었을 때는 342원 \200원 \242(3옥탈 값)이 됩니다.각각의 팔분의 값을 육분의 값으로 변환하여 함께 으깨는 것처럼 간단하지 않습니다.따라서 "E280 A2"는 코드의 16진수 유니코드 포인트가 아닙니다.
나는 별표로 보이는 캐릭터와 같은 것을 얻었지만 대신 UTF-8 시퀀스였습니다.
Encoder * st;
컴파일 시 다음을 반환했습니다.
g.c:2:1: error: stray ‘\342’ in program
g.c:2:1: error: stray ‘\210’ in program
g.c:2:1: error: stray ‘\227’ in program
342 210 227은 ASTARISK O퍼레이터(Unicode code point U+2217)를 위한 UTF-8인 것으로 밝혀졌습니다.
'*'를 삭제하고 다시 입력하면 문제가 해결됩니다.
컴파일러가 특별한 문자를 찾을 때마다 이런 종류의 컴파일 오류가 발생합니다.발견한 오류는 다음과 같습니다.
오류: 프로그램의 stray '\302' 및 오류: 프로그램의 stray '\240'
....
채팅 메신저에서 복사한 코드입니다.페이스북 메신저에서는 특별한 캐릭터였습니다.Vim 에디터에 복사 후 올바른 문자로만 변경되었습니다.그러나 컴파일러가 위의 오류를 주고 있었습니다.그럼..그 후에 내가 수기로 쓴 그 진술.해결됐습니다... :)
아마도 인터넷에서 코드를 복사했기 때문일 것입니다(아스키 인코딩 페이지가 아닌 UTF-8 인코딩 페이지가 있는 사이트에서). 따라서 이 사이트에서 코드를 ASCII로 변환할 수 있습니다.
http://www.percederberg.net/tools/text_converter.html
여기서 UTF-8로 다시 변환하여 수동으로 오류를 탐지하거나 ASCII로 자동 변환하여 모든 Stray 문자를 제거할 수 있습니다.
이 문제는 HTML 페이지에서 일부 텍스트를 복사했거나 Windows 환경에서 수정을 완료하고 Unix/Solaris 환경에서 컴파일하려고 할 때 발생합니다.
파일에서 특수 문자를 제거하려면 "dos2unix"를 수행하십시오.
dos2unix fileName.ext fileName.ext
코드에 잘못된 문자가 있습니다.
이 오류는 일반적인 복사 붙여넣기 오류로, 특히 Microsoft Word 문서나 PDF 파일에서 코드를 복사할 때 발생합니다.
위의 tr 명령어 사용에 문제가 있음을 발견하였습니다.tr 명령 COMPLETY는 "smart quotes"를 제거합니다.'똑똑한 인용문'을 이런 식으로 대체하는 게 좋을 것 같습니다.
교체할 내용을 간단히 미리 볼 수 있습니다.
sed s/[”“]/'"'/g File.txt
이렇게 하면 교체 작업이 수행되고 WithoutSmartQuotes라는 새 파일에 교체 작업이 포함됩니다.txt.
sed s/[”“]/'"'/g File.txt > WithoutSmartQuotes.txt
이렇게 하면 원래 파일을 덮어씁니다.
sed -i ".bk" s/[”“]/'"'/g File.txt
http://developmentality.wordpress.com/2010/10/11/how-to-remove-smart-quotes-from-a-text-file/
코도는 10월 5일에 정확히 맞았습니다.¤t[i]
는 의도된 텍스트입니다(소스를 HTML에 넣을 때 무심코 통화 기호가 삽입됨).
http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c
코도의 변화는 이 공격 코드를 오류 없이 컴파일하게 만듭니다.나는 그렇게 했고 Ubuntu 12.04(Precise Pangolin)의 공격을 사용하여 루트 권한으로 확장할 수 있었습니다.
여기에 제시된 설명은 정확합니다.코드에 잘못된 문자가 포함되어 있는 웹 사이트나 PDF 파일에서 코드를 복사했기 때문에 이 문제가 발생했을 수도 있다는 점을 덧붙이고 싶습니다.
잘못된 문자를 찾거나 코드를 다시 입력해 보십시오.그러면 분명히 컴파일이 될 겁니다.
출처: Stray 오류 사유
저의 경우, 제가 텍스트 형식으로 코드를 복사하여 편집자(gedit)에 붙여넣을 때 이 오류가 발생했습니다.
코드가 텍스트 문서(.odt)에 있었습니다.복사해서 gedit에 붙여넣었습니다.
동일한 경우 수동으로 코드를 다시 쓴 것입니다.
언급URL : https://stackoverflow.com/questions/19198332/compilation-error-stray-302-in-program-etc
'programing' 카테고리의 다른 글
이 jQuery ajax 클릭 이벤트가 여러 번 발생하는 이유는 무엇입니까? (0) | 2023.09.13 |
---|---|
WordPress에서의 콜백 함수로서의 클래스 전달방법 (0) | 2023.09.13 |
XML에서 따옴표를 사용합니다. 한 개입니까, 두 개입니까? (0) | 2023.09.13 |
선택한 사용자 지정 관리 하위 메뉴를 수동으로 설정하는 방법은 무엇입니까? (0) | 2023.09.13 |
PowerShell 문자열 기본 매개 변수 값이 예상대로 작동하지 않음 (0) | 2023.09.08 |