- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
write(STDOUT_FILENO, argv[1], atoi(argv[2]));
return 0;
}
以下输出(在 Ubuntu 上的 bash 中运行)显示“xyz”未在 argv 中传递。我想确保这是操作系统的限制,而不是 shell。所以不可能在 argv 中的字符串中间传递空字符。有人可以确认吗?谢谢。
$ ./main.exe $'abc\000xyz' 7 | xxd
00000000: 6162 6300 3700 53 abc.7.S
最佳答案
所有程序都由 exec
调用启动,尽管有操作系统实现,让我们看看 POSIX 标准对 exec
functions 说了什么.
int execve(const char *path, char *const argv[], char *const envp[]);
argv
是传递给程序的参数,envp
是环境变量。
The argv and environ arrays are each terminated by a null pointer. The null pointer terminating the argv array is not counted in argc.
The argument argv is an array of character pointers to null-terminated strings.
所以,很容易得出结论:
argv
NULL
字符串不能传递给 argv,它将终止 argv
,并丢弃所有后续参数。argv
中的任何字符串都不能包含\x0
字符,\x0
将终止当前参数字符串。python -c 'print "\x30\x00\x31"' | xargs --null prog
尝试:
python -c 'print "\x30\x00\x31"' | strace -f xargs --null echo
我们可以发现:
...
...
...
read(0, "0\0001\n", 4096) = 4
...
...
...
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f09f46d9850) = 21232
strace: Process 21232 attached
...
...
...
[pid 21232] execve("/bin/echo", ["echo", "0", "1\n"], 0x7ffe5ccd7638 /* 74 vars */ <unfinished ...>
它表明 xargs
在调用 prog
时可能会将包含 \x0
的参数分成两个参数。不是 shell 做的,不是 OS、libc 做的,而是 xargs
关于可以将空字符传递给字符串中间的 argv 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54938639/
我正在尝试用 Java 构建一个字符串,该字符串的长度最多为 3,最少为 1。 我正在根据整数数组的内容构建字符串,如果数组的内容为 -1,我想在字符串中输出一个空字符。否则字符串将包含整数的字符版本
我有一个类,其中有一个方法可以在字符串中包含 NUL 字符的情况下终止程序。具体表达是这样的: stringVar.indexOf('\u0000') < 0 这个字符串是通过 Scanner 从用户
我有一个 wchar_t 数组。我需要在数组中的特定位置添加一个 unicode 空字符。 wchar_t var1[100]; var1[79] = '\u0000'; 我尝试了上面的方法,但出现以
好吧,这听起来可能是重复的,但我已经尝试了所有可能性,例如 str.strip()、str.rstrip()、str.splitline (),还 if-else 检查像: if str is not
System.out.println("-----------------------------------------------------------"); System.out.pr
我有一个奇怪的问题。我从公司内部的许多不同应用程序接收数据,并将这些数据显示在网站上。根据发送数据的系统,数据本身可能在字符串中包含一些奇怪的字符。我的问题是我有一个用户可以搜索以允许其中包含此数据的
我遇到了 aSSL ,这似乎有几年历史了,想知道是否有人有其他“安全”AJAX 连接代码示例?显然,这不如使用 SSL 证书安全,但使用 null character SSL在那里进行攻击(最近针对
我有一个类似于以下内容的 pyspark 数据框: df = sql_context.createDataFrame([ Row(a=3, b=[4,5,6],c=[10,11,12], d='b
我有以下要执行的查询: MyModel.objects.annotate(current_name=Coalesce('nickname', 'name')).order_by('current_na
每当 rails 变量等于 nil(或者实际上每当我使用 rails 代码(参见第 3 个代码示例))时,我的 html 中就会得到一串空字符。 new.html.haml %h1.editable.
我是一名优秀的程序员,十分优秀!