假设 addr
是堆栈上局部变量的地址,下列检索变量值的正确方法是否正确(ChildPid 是被跟踪者的 ID)?
double data = (double) ptrace(PTRACE_PEEKDATA, ChildPid, addr, 0);
float data = (float) ptrace(PTRACE_PEEKDATA, ChildPid, addr, 0);
谢谢。
最佳答案
文档说 PTRACE_PEEKDATA
返回一个词。它还说
The size of a "word" is determined by the operating-system variant (e.g., for 32-bit Linux it is 32 bits).
因此,您不能可靠地使用单个 ptrace()
调用在 32 位系统上获得两倍的结果,只有一半。另一半的地址可能取决于堆栈是向上还是向下增长。在 64 位系统上,您必须弄清楚返回单词的哪一半具有 float 。
所以...这完全取决于您必须做什么。
关于linux - 在 Linux 64 位上,ptrace() 可以返回 double 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013823/