无论如何都可以附加到进程的地图,同时使您的文件对地图隐藏


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

可能还有其他方法。你会知道所有这些,或者这个过程可能会发现你的诡计。

最新更新