linux - 在 Linux 64 位上,ptrace() 可以返回 double 值吗?

标签 linux debugging ptrace

假设 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/

相关文章:

c++ - 使用ptrace时mmap的返回值

c - 如何使用ptrace附加进程中的所有线程

c# - 在Linux上使用docfx.console nuget软件包

linux - 为 arm-linux-gnueabihf 交叉编译 libcurl : Unable to link function recv

linux - 什么是基于内核的虚拟机?

debugging - 在 Chrome 的调试器中暂停?

linux - 在循环中加入命令

java - Eclipse:无法在 jar 文件类中查看静态方法的局部变量

c++ - Windows 堆分配调用堆栈 - 奇怪的调用堆栈

c++ - 如何防止使用 ptrace 执行系统调用