2016-12-07 9 views
0

したがって、次のコードを実行しようとすると、Pythonで発生します。TypeError:execv()arg 2は、文字列のみを含む必要があります。

from subprocess import * 
args = "A"*99 

args = list(args) 
args[ord('A')] = "\x00" 
args[ord('B')] = "\x20\x0a\x0d" 
proc= Popen(["./input2"]+args,stdin=PIPE,stderr=STDOUT) 

私は、だから私はいくつかの研究を行なったし、それは私にエラーを与えるPopen()に任意の整数フォーマットされた引数がある場合に実現

TypeError: execv() arg 2 must contain only strings

を取得します。しかし、どの引数が整数である可能性があるのか​​分かりません。

FYI:私は

args[ord('A')] = "\x00" 
args[ord('B')] = "\x20\x0a\x0d" 

このコードをコメントアウトした場合、エラーがまったく表示されません。

  • プログラムINPUT2は、単に入力を取り、値を比較するたCで書かれている - のargv [「A」] - 「\のX00」と真、プログラムは、ステージ1が透明印刷かどう。
+0

あなたは何をしようとしていますか?あなたはなぜそれらの奇妙なコマンドライン引数を '。/ input2'に渡そうとしていますか? 'input2'があなたが書いたものであれば、なぜこのようなことをコマンドライン引数として使うのですか? – user2357112

+0

プログラムの引数の1つにヌルバイト( '" \ x00 "')を入れることはできません。 – user2357112

+0

それはargv ['A']の値が "\ x00" と一致しなければならないpwnable.kr –

答えて

2

これはコメントとして、より適切であるが、私はまだ十分な担当者を持っていません。私はこの挑戦を経て、正確な問題に直面していました。あなたは単にそのエラーを避けるためにargs[ord('A')] = ""を行うことができます。

0

Popenへの引数には、NUL char \x00が含まれていない可能性があります。例えば

この作品:

Popen(["/bin/echo", "Hello"]) 

しかし、これはしません:

Popen(["/bin/echo", "Hello\x00"]) 
+0

hmmmmmm Popenのための機能? –

+0

Popenは低レベルのc関数 'execv'を使ってプログラムを実行します。 'execv'パラメータは文字列ですが、C文字列はNUL charで終わるので、Popenや他の同様の関数を使って引数の一部としてNUL charを送る方法はありません。 –

+0

答えのためのhmmmm gotcha ty –

関連する問題