当前位置: 首页 > news >正文

大型论坛网站建设网站建设工作整改报告

大型论坛网站建设,网站建设工作整改报告,网络热词,网站版面做得好的在程序出现bug的时候#xff0c;最好的解决办法就是通过 GDB 调试程序#xff0c;然后找到程序出现问题的地方。比如程序出现 段错误#xff08;内存地址不合法#xff09;时#xff0c;就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的。本文不是介绍GDB不是使…在程序出现bug的时候最好的解决办法就是通过 GDB 调试程序然后找到程序出现问题的地方。比如程序出现 段错误内存地址不合法时就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的。本文不是介绍GDB不是使用方式而是大概介绍 GDB 的实现原理当然是 GDB 是一个庞大而复杂的项目不可能只通过一篇文章就能解释清楚所以本文主要是介绍 GDB 使用的核心的技术 - ptrace。一ptrace系统调用ptrace() 系统调用是 Linux 提供的一个调试进程的工具ptrace() 系统调用非常强大它提供非常多的调试方式让我们去调试某一个进程下面是 ptrace() 系统调用的定义long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);下面解释一下 ptrace() 各个参数的作用request指定调试的指令指令的类型很多如PTRACE_TRACEME、PTRACE_PEEKUSER、PTRACE_CONT、PTRACE_GETREGS等等下面会介绍不同指令的作用。pid进程的ID这个不用解释了。addr进程的某个地址空间可以通过这个参数对进程的某个地址进行读或写操作。data根据不同的指令有不同的用途下面会介绍。二ptrace使用示例下面通过一个简单例子来说明 ptrace() 系统调用的使用这个例子主要介绍怎么使用 ptrace() 系统调用获取当前被调试追踪进程的各个寄存器的值代码如下ptrace.c#include sys/ptrace.h #include sys/types.h #include sys/wait.h #include unistd.h #include sys/user.h #include stdio.h int main() { pid_t child;struct user_regs_struct regs;child fork(); // 创建一个子进程if(child 0) { // 子进程ptrace(PTRACE_TRACEME, 0, NULL, NULL); // 表示当前进程进入被追踪状态execl(/bin/ls, ls, NULL); // 执行 /bin/ls 程序} else { // 父进程wait(NULL); // 等待子进程发送一个 SIGCHLD 信号ptrace(PTRACE_GETREGS, child, NULL, ®s); // 获取子进程的各个寄存器的值printf(Register: rdi[%ld], rsi[%ld], rdx[%ld], rax[%ld], orig_rax[%ld]\n,regs.rdi, regs.rsi, regs.rdx,regs.rax, regs.orig_rax); // 打印寄存器的值ptrace(PTRACE_CONT, child, NULL, NULL); // 继续运行子进程sleep(1);}return 0; }通过命令 gcc ptrace.c -o ptrace 编译并运行上面的程序会输出如下结果Register: rdi[0], rsi[0], rdx[0], rax[0], orig_rax[59] ptrace ptrace.c上面结果的第一行是由父进程输出的主要是打印了子进程执行 /bin/ls 程序后各个寄存器的值。而第二行是由子进程输出的主要是打印了执行 /bin/ls 程序后面输出的结果。下面解释一下上面程序的执行流程主进程调用 fork() 系统调用创建一个子进程。的进程调用 ptrace(PTRACE_TRACEME,...) 把自己设置为被追踪状态并且调用 execl() 执行 /bin/ls 程序。被设置为追踪TRACE状态的子进程执行 execl() 的程序后会向父进程发送 SIGCHLD 信号并且暂停自身的执行。父进程通过调用 wait() 接收子进程发送过来的信号并且开始追踪子进程。父进程通过调用 ptrace(PTRACE_GETREGS, child, ...) 来获取到子进程各个寄存器的值并且打印寄存器的值。父进程通过调用 ptrace(PTRACE_CONT, child, ...) 让子进程继续执行下去。从上面的例子可以知道通过向 ptrace() 函数的 request 参数传入不同的值时就会有不同的效果。比如传入 PTRACE_TRACEME 就可以让进程进入被追踪状态而转入 PTRACE_GETREGS 时就可以获取被追踪的子进程各个寄存器的值等。
http://www.hkea.cn/news/14442613/

相关文章:

  • dw 如何做自适应网站免备案空间推荐
  • 哪家企业做网站好无锡常规网络营销是什么
  • 找设计案例的网站开发php网站建设
  • 怎样做卡盟网站小视频剪辑app哪个好
  • 淘宝网站青岛网站建设方案服务
  • 关于外贸公司的网站模板html网页超链接代码
  • 深圳做电商平台网站建设风控网站开发
  • 深圳做微信商城网站建设怎样做网站关键词
  • 长沙商城网站建设微友说是做网站维护让帮忙投注
  • 各大搜索引擎提交网站入口大全wordpress设置目录
  • 九台区建设银行网站wordpress 中英文
  • 苏州比较大的网站公司国内重要新闻
  • 做动图为所欲为的网站记事本做的网站链接怎么装饰
  • 建设校园网站的背景及意义网站建设对企业经营
  • 电子商务网站推广案例荣茂网站建设
  • 提供坪山网站建设沈阳工程信息交易网
  • 做网站最简单的工具网页项目策划书模板
  • 商务网站建设的可行性分析包括成品短视频app大全
  • 北京知名的网站建设公司公司网站建设优点
  • 网站建设的7种流程图中国服务器市场
  • 教育网站开发深圳做网站费用
  • 网站制作的基本概念如何快速新建一个网站
  • 怎么查网站接入商可以做淘宝客的网站有哪些
  • 杭州做网站比较出名的公司关于建立企业网站的方案内容
  • 甘肃省建设厅官网站wordpress 改邮箱
  • 网站管理规范西安到北京火车票多少钱
  • 苏州学习网站建设怎么学习制作网站
  • 同个主体新增网站备案专门教做甜品的网站
  • 重庆公司建设网站hao123网址之家官网
  • 来宾城乡建设局网站网站个人微信收款方案