你好,我创建了一个名为的共享库logger.so
。这个库是我的习惯fopen()
和fwrite()
。它收集一些数据并使用这些数据生成文件。
现在,我正在编写bash脚本,我也想使用该库。产生一个txt文件,我将能够看到产生我的自定义文件的额外文件fopen()
。因此,当我fopen()
在ac文件中使用命令时,将产生此额外文件。
我的问题是bash中正在使用哪些命令fopen()
并fwrite()
起作用?
我已经预加载了共享库,但是它不起作用。也许这些命令不使用fopen()
,fwrite()
export LD_PRELOAD=./logger.so
read -p 'Enter the number of your files to create: [ENTER]: ' file_number
for ((i=1; i<=file_number; i++))
do
echo file_"$i" > "file_${i}"
done
这可能需要反复试验。我看到两种方法可以做到这一点。一种是运行可能处理文件的命令,bash
并查看它们在被跟踪时是否调用fopen
:
strace bash -c "read a < /dev/null"`
或者
strace bash -c "read a < /dev/null"` 2&>1 | fgrep fopen
这表明read
使用open
,而不是fopen
。
另一种方法是grep
按照@oguz的建议浏览bash的源代码。当我这样做时,我发现了几个fopen
被称为的地方,但是我没有进一步调查:
curl https://mirrors.tripadvisor.com/gnu/bash/bash-5.1-rc3.tar.gz|tar -z -x --to-stdout --wildcards \*.c | fgrep fopen
你将需要取消归档整个程序包,并一个接一个地搜索.c文件,例如:
curl https://mirrors.tripadvisor.com/gnu/bash/bash-5.1-rc3.tar.gz|tar -z -v -x --wildcards \*.c
你还可以通过FTP传输文件或通过浏览器保存文件,tar
如果没有,也可以独立运行curl
(wget
也可以使用)。
希望你可以跟踪相关命令,但这可能并不容易。