假设我的非 root 32 位应用程序在 64 位系统上运行,其中所有文件系统都以只读方式挂载。该应用程序在内存中创建了一个 64 位 ELF 的图像。但是由于只读文件系统,它无法将此图像转储到文件中进行操作execve。是否仍有支持的方式从此映像启动进程?
注意:这里的主要问题是从 32 位模式切换到 64 位模式,而不是进行任何可能不可靠的黑客攻击。如果这解决了,那么整个问题就变得微不足道了——只需制作一个自定义加载器。
在下面的例子中,grep行为很奇怪:它提供了-I选项,根据手册页,它应该grep忽略二进制文件(类似于--binary-files=without-match),但我仍然得到“二进制文件匹配”输出。
$ cat <<'EOF' | uudecode > test-file
begin 664 /dev/stdout
M>`&5SLU*Q$`0!&#/>8J^"TM/=^8/1%2\>1`\>.^9Z=D-9!))9@7?WBB^@%"G
MHOBHO+8V=2!'-WU3A9PX%*8PBB:VGK@6)Y*HFAB(.2;.;$SQPX=LNG3(>2SH
MDJE!5;R+E9P21J::8U2+?@R>RK&7:[^L&[Q=]UD6>)$D?9<O_82[Y$\&S4_,
MP[G)-)_RVN[!6(S.>F0/M\B(P]$>5[O^%_$8+/(?,CSI+]%DD;/"^^,K3`OD
,6?8=GK6MPS?WDU!"
`
end
EOF
$ grep -I 8 test-file
Binary file test-file matches
$ grep --binary-files=without-match 8 test-file
Binary file test-file matches
Run Code Online (Sandbox Code Playgroud)
显然,grep考虑二进制文件,但仍然尝试匹配并报告结果。为什么没有像-I选项规定的那样忽略“二进制文件” ?
我在 Ubuntu 18.04 上使用 GNU grep 3.1。
我有一个正在运行的文件生成器,其中每个文件在前一个文件之后都有一个按字母顺序排列的名称。起初我正在做我的循环for file in /path/to/files*; do...,但我很快意识到 glob 只会在循环之前扩展,并且不会处理循环时创建的任何新文件。
我目前这样做的方式很丑陋:
while :; do
doneFileCount=$(wc -l < /tmp/results.csv)
i=0
for file in *; do
if [[ $((doneFileCount>i)) = 1 ]]; then
i=$((i+1))
continue
else
process-file "$file" # prints single line to stdout
i=$((i+1))
fi
done | tee -a /tmp/results.csv
done
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来循环不断增加的文件列表,而没有上述的黑客攻击?
我正在使用 Kubuntu 14.04.2 LTS。我使用以下命令设置语言环境:
export LANG=ru_RU.utf8 LANGUAGE=ru_RU.utf8 LC_ALL=ru_RU.utf8
Run Code Online (Sandbox Code Playgroud)
所以locale现在说所有条目都是ru_RU.utf8. 但是当我发出时date,我得到以下信息:
??. ??? 14 12:55:36 MSK 2015
Run Code Online (Sandbox Code Playgroud)
虽然用英语说“May 14”是正常的,但我们从不用俄语说“??? 14”(这意味着“5月14日”而不是“5月14日”)。它应该是“14 ???” 或者,最坏的情况是“???,14”。
根据info coreutils 'date invocation',在C语言环境中,默认格式字符串是'+%a %b %e %H:%M:%S %Z %Y',它看起来正是我在ru_RU.utf8语言环境中得到的。但是同一个信息页面说格式字符串取决于LC_TIME语言环境类别。因此,我得出结论,系统语言环境数据库中某处存在错误。
这确实是一个错误,还是我错过了什么?
在 Ubuntu 18.04 上,我有以下行为date:
$ date --version | head -n1
date (GNU coreutils) 8.28
$ date
?? ??? 8 13:18:18 MSK 2019
$ TZ=UTC date
?? ??? 8 10:18:23 UTC 2019
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。但现在我试图在 Raspbian 9 上做同样的事情:
$ date --version | head -n1
date (GNU coreutils) 8.26
$ date
Tue Oct 8 13:18:50 MSK 2019
$ TZ=UTC date
Tue Oct 8 13:18:51 MSK 2019
Run Code Online (Sandbox Code Playgroud)
Raspbian 版本date忽略TZ环境变量的原因是什么?