首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ptrace(PTRACE_PEEKUSER)和ptrace(PTRACE_PEEKDATA)的区别?

ptrace(PTRACE_PEEKUSER)和ptrace(PTRACE_PEEKDATA)的区别?
EN

Stack Overflow用户
提问于 2012-03-21 11:40:03
回答 1查看 9.4K关注 0票数 12

ptrace上发布了许多问题(最近的5个问题是我的:( ))之后,当我替换时,我终于得到了所需的输出

代码语言:javascript
复制
reg_val[1] = ptrace(PTRACE_PEEKDATA, child, 4 * EBX, NULL);

使用

代码语言:javascript
复制
reg_val[1] = ptrace(PTRACE_PEEKUSER, child, 4 * EBX, NULL);

手册页中提到的区别如下

  • PTRACE_PEEKTEXT在子内存中的地址读取一个单词
  • PTRACE_PEEKUSER在子用户区域的偏移加号处读取一个单词

我无法仅从手册页中理解这种差异。有人能教我更多这方面的知识吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-21 11:54:25

PTRACE_PEEKDATA用于读取子程序的数据/代码部分(一般为进程--也就是所谓的tracee)。如您所知,调试器经常使用ptrace。他们可以使用这个调用来检查变量的值。例如,在GDB/DBX中,如果您说

代码语言:javascript
复制
print count

调试器将在内部使用ptrace调用PTRACE_PEEKDATA并找到它的值。

PTRACE_PEEKUSER用于读取子用户区域的内容,该区域保存寄存器和其他信息的内容。sys/user.h列出了其他信息。

例如,用户区域包含,

代码语言:javascript
复制
struct user_regs_struct
{
  long int ebx;
  long int ecx;
  long int edx;
  long int esi;
  long int edi;
  long int ebp;
  long int eax;
  long int xds;
  long int xes;
  long int xfs;
  long int xgs;
  long int orig_eax;
  long int eip;
  long int xcs;
  long int eflags;
  long int esp;
  long int xss;
};

In

  • PTRACE_PEEKDATA用于程序数据(例如变量)和代码;
  • PTRACE_PEEKUSER用于诸如寄存器值和其他调试信息;

注意PTRACE_PEEKDATAPTRACE_PEEKTEXT__之间的等价性。来自http://man7.org/linux/man-pages/man2/ptrace.2.html

Linux没有单独的文本和数据地址空间,因此这两个请求目前是等效的。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9803908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档