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 */

可能还有其他的方法。你会明白所有这些,否则这个过程可能会发现你的诡计。

关于linux - 无论如何,有没有附加到流程 map 上的文件,同时保持文件对 map 的隐藏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46615574/

10-14 15:56