[완료] 리눅스에서 실행 중인 프로세스에 입력을 넣는 방법

martheme의 이미지

어떤 프로그램을 실행하는 도중에 표준 입력으로 사용자의 입력을 받는 부분이 있는데,
여기에 스크립트를 이용하여 키보드로는 넣을 수 없는 입력을 넣고자 합니다. (ex. NULL 문자)

문제를 해결하기 위해 제가 가장 먼저 시도해 본 것은

^Z
[1]+ Stopped ./program

Ctrl+z 로 입력 받는 부분에서 일시정지 시켜놓고

$ python -c 'print "\x00"' | fg

이런 식으로 파이프로 입력을 넘겨보았지만 이내 당연히 안되는 것을 깨달았습니다.
글을 잘 못써서 제가 하고 싶은 것이 무엇인지 글에 잘 담겼는지는 모르겠지만 이런 경우에 어떻게 해야 하는지 알려주시면 감사하겠습니다.

expect 같은 걸 사용해보려고 했지만, 문제가 되는 부분에 도달하기 위해 넣어야하는 값들(매번 변함)을 예측할 수 없는 상황이기 때문에 사용할 수 없었습니다.

madman93의 이미지

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

dg의 이미지

터미널에서 컨트롤-@ 를 치면 널문자가 입력된다는군요.

imposno의 이미지

echo "ABC" | ./program

이렇게 하시면 echo 명령어에 대한 결과가 program이라는 프로그램의 표준 입력으로 사용됩니다.

아니면 gdb를 이용하셔도 될것 같습니다.
gdb에서 변수의 값을 출력하는데 print를 사용할 수 있지만 메모리에 값을 세팅할 수도 있습니다.

제가 질문을 잘못이해했으면 죄송합니다.

martheme의 이미지

지금 시도해 볼만한 것은 FIFO 군요. 혹시 성공하게 되면 다시 댓글로 달도록 하겠습니다.
Ctrl+@ 가 NULL인건 처음 알았습니다 :)

martheme의 이미지

Ctrl+A 는 0x01이고 Ctrl+B 는 0x02이고... 이런게 있었군요.
다만 확장형 아스키코드에 대해서는 잘 모르겠네요...

bushi의 이미지

아주 오랜 옛적엔 xterm 도 MS-DOS 콘솔처럼 Alt+키패드숫자키 조합으로 ASCII 문자를 직접 입력할 수 있었습니다.
이 기능이 아직 지원되는 다른 터미널 에뮬레이터를 찾아보거나
리눅스 fb 콘솔로 나가서 실험해보세요.

Ctrl+문자키 조합은 터미널의 설정과 직접적인 관련이 있으니 너무 철썩같이 믿지는 마시고요.
stty -a 명령으로 터미널 설정값들을 볼 수 있고, ^ 로 표시되는 것을 ctrl 키로 이해하시면 됩니다.

OTL

martheme의 이미지

정말 감사합니다.
제가 하려고 했던 것을 완벽하게 할 수 있네요.

비록 일시 정지시킨 프로세스에 대해 외부에서 입력을 넣을 방법은 아직 못 찾았지만 이것만으로도 충분하네요.

martheme의 이미지

대상 프로그램을 제 마음대로 변조할 수 없기 때문에, FIFO의 방법으로는 어려울 것 같습니다.

bushi의 이미지

대상 프로그램이 터미널을 꼭 필요로하는 놈이 아니라면,

mkfifo x
program < ./x &
echo -en "\x65\n" > x

정도로 될 것 같은데요. 단지... echo 가 종료되는 시점에 fifo 로 시그널이 갈 테고, program 도 종료되겠죠.

OTL

martheme의 이미지

특수한 값들을 넣어야 되는 상황이 발생하기 이전에는 터미널에 출력되는 값을 보고 그에 맞추어 입력을 넣어야하기 때문에
그 값들을 미리 예측할 수 없는 이상, 처음부터 FIFO로 대상 프로그램에 입력을 넣기는 힘든 것 같습니다. OTL

프로그램이 실행 중인 도중에 FIFO로 입력을 전환할 방법이 있으면 가능할 것 같은데...

dg의 이미지

mkfifo x
./program < x

다른 터미널로
cat > x
한담에 입력은 이 터미널로 하고 출력은 원래 실행시킨 터미널로...

특수문자 입력이 필요하면 터미널 새로 띄어서
python -c 'print "\x00"' > x
이런식으로 하면 될거 같은데요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.