2013-02-27 3 views
6

%s을 사용하는 scanf에 16 진수가 아닌 문자를 입력 할 수있는 방법이 있습니까? 난 버퍼 오버 플로우를 보여주기 위해 \x08\xDE\xAD과 같은 16 진수 문자를 삽입하려고합니다.scanf ("% s")에 비 ASCII 문자 입력

입력은 명령 줄 매개 변수가 아니라 프로그램 내부의 scanf입니다.

+0

그렇다면 프로그램의 표준 입력에'fprintf ("\ 0xDE")를 사용하지 않으시겠습니까? –

+2

키보드에서 해당 문자를 입력 할 수 있으면 작동합니다. 그렇지 않으면 리디렉션 './a.out

+0

첫 번째 편집이 끝나지 않았습니다. 입력이 명령 행 인수 인 경우 사용자가 말하는 것은 작동합니다. 그러나 이것은 명령 행 인수가 아닙니다. 그리고 인쇄하고 싶은 글자는 인쇄 가능하지 않습니다. – asudhak

답변

1

'scanf()'으로 말하면 아마도 여기에는 다른 데이터가 있습니다. Perl이나 Python 스크립트와 같은 프로그램을 사용하여 데이터를 생성하고 비 ASCII 문자를 프로그램의 표준 입력에 쓸 수 있습니까? 터미널처럼 보이기 위해 표준 입력이 필요한 경우 expect을 조사해야합니다. 이것은 문제를 다루는 일반적인 방법입니다.

2

표준 입력란에 임의의 데이터를 입력한다고 가정합니다 (scanf으로 읽음).

셸을 사용하여 데이터를 만들고이를 프로그램에 파이프 할 수 있습니다. 이것은 단지 한 (A %s 형식 scanf 흰색 공간에 정차하기 때문에) 먹이 할 공백 문자가 없기 때문에 작동합니다

printf '\x08\xDE\xAD' | yourprogram 

참고.

+0

Windows에서'printf' 명령을 사용하지 않는다면, 파일을 만들고'stdin'을 그것에 리다이렉하십시오 :'yourprogram anatolyg