Prior comments were tripped up by your lack of escaping of your (inner) double quotes; so I'll start by restating the problem without that mistake:
$ perl -e 'system("echo -e \"\xFF\x08\x01\" | od");' 0000000 062455 177440 000410 000012 0000007 $ perl -e 'system("echo -e \"\xFF\x08\x00\" | od");' sh: 1: Syntax error: Unterminated quoted string $
And the explanation is quite simple. Perl supports "\x00" bytes in strings but many of the C library routines that Perl must call only support "\x00"-terminated strings.
Even in C, if you pass "echo blah\0blah blah" to system(), what gets passed is more accurately "echo blah\0blah blah\0" and system()/sh stop copying/parsing the string when they hit a terminating "\0" character... the first one, of course. (This is also described in the standard Perl documentation.)
- tye
In reply to Re: null byte issue in system command ('\0' in C)
by tye
in thread null byte issue in system command
by donald99
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |