我正在研究一种有时会劫持应用程序执行的工具,包括在不同的堆栈中工作。
我试图让内核在执行某些系统调用时始终看到应用程序堆栈,这样它就会在/proc/pid/maps.
但是,仅仅修改系统调用周围的esp似乎还不够。当我在" cat / proc / self / stat"上使用我的工具时我看到kstkesp(entry 29 here)有时会有我想要的值,但有时会有一个不同的值,对应于我的备用堆栈。
我试图理解:
答案 0 :(得分:1)
看起来已定义,例如在http://lxr.free-electrons.com/source/fs/proc/array.c?v=3.16的第409行给我。
过去几年有很多关于相关宏KSTK_ESP的讨论,例如:https://github.com/davet321/rpi-linux/commit/32effd19f64908551f8eff87e7975435edd16624
和
http://lists.openwall.net/linux-kernel/2015/01/04/140
从我收集到的关于间歇性奇怪的事情来看,似乎NMI或其他中断有时在内核中命中,然后在这种情况下它没有正确地走栈。