input="$(
sudo gdb -n -q -batch-silent
-ex "set logging on"
-ex "set logging file /dev/null"
-ex "set logging redirect on"
-ex "attach $PID"
-ex "set $dlopen = (void*(*)(char*, int)) dlopen"
-ex "call $dlopen("/$filename", 1)"
-ex "detach"
-ex "quit"
)"
基本上我想将我的文件$filename附加到$PID但我不想$PID知道$filename在其地图中?我该怎么做
我该怎么做
这并不容易:进程有太多方法可以发现$filename
在其地址空间中:
读取这些文件:
/proc/$pid/maps
/proc/$pid/task/$tid/maps
调用这些函数:
dl_iterate_phdr
dladdr
读取以下全局变量:
_DYNAMIC[] /* points to _r_debug */
_r_debug.r_map /* points to linked list of DSOs */
可能还有其他方法。你会知道所有这些,或者这个过程可能会发现你的诡计。