Warm tip: This article is reproduced from serverfault.com, please click

c-使用共享库:自定义myfopen(),myfrwrite()

(c - using a shared library : custom myfopen(), myfrwrite())

发布于 2020-11-28 08:03:34

你好,我创建了一个名为的共享库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
Questioner
Ioannis Michalakis
Viewed
0
eewanco 2020-11-29 01:05:57

这可能需要反复试验。我看到两种方法可以做到这一点。一种是运行可能处理文件的命令,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如果没有,也可以独立运行curlwget也可以使用)。

希望你可以跟踪相关命令,但这可能并不容易。