socket/ptrace

2024-06-15 07:08
文章标签 socket ptrace

本文主要是介绍socket/ptrace,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. socket
(1). 介绍
    使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。
(2). 服务器端建立 (socket -> bind -> listen -> accept -> read/write)
    程序通过调用socket函数(AF_LOCAL, SOCK_STREAM),建立了主动连接的套接字.
    调用bind函数,将套接字与地址信息关联起来.
    调用listen函数实现对该端口的监听,同时变为监听套接字.
    当有连接请求时,通过调用accept函数建立与客户端的连接.
    调用read/write函数来读取/发送消息,当然也可以使用recv/send函数实现相同的功能.
(3). 客户端建立 (socket -> connect -> read/write)
    程序通过调用socket函数(AF_LOCAL, SOCK_STREAM) ,建立了主动连接的套接字。
    调用connect函数(附带地址信息),向服务器端发出连接请求。
    调用read/write函数来读取/发送消息,当然也可以使用recv/send函数实现相同的功能。
2. ptrace (process trace)
(1). 介绍
    ptrace()是个系统调用,提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image (用于实现断点调试,代码分析)
        修改被跟踪进程的空间(内存或寄存器)。
        任何传递给被跟踪进程的信号(除了SIGKILL)都会使得这个进程进入暂停状态,这时跟踪进程通过wait()得知相关的状态并做相应的修改。

(2). 限制
    不能跟踪进程init。不能跟踪自己。
(3). 功能


    PTRACE_TRACEME
        本进程被其父进程所跟踪。其父进程应该希望跟踪子进程,用于debugger。
    PTRACE_ATTACH
        跟踪指定pid 进程,成为pid的父进程,并停止pid进程。
    PTRACE_DETACH
        结束跟踪。
    PTRACE_PEEKTEXT, PTRACE_PEEKDATA和PTRACE_POKETEXT, PTRACE_POKEDATA
        读取/修改被跟踪进程的user space里的内存。
    PTRACE_GETREGS, PTRACE_SETREGS、PTRACES_GETFPREGS, PTRACE_SETFPREGS、PTRACE_GETVFPREGS, PTRACE_SETVFPREGS
        读取/修改被跟踪进程的通用/浮点寄存器值。
    PTRACE_SYSCALL, PTRACE_CONT
        重新运行,(PTRACE_SYSCALL会使每次系统调用暂停)。
    PTRACE_SINGLESTEP
        设置单步执行标志。
    PTRACE_KILL
        杀掉子进程,使它退出。

这篇关于socket/ptrace的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062755

相关文章

Java Socket服务器端与客户端的编程步骤总结

一,InetAddress类: InetAddress类没有构造方法,所以不能直接new出一个对象; 可以通过InetAddress类的静态方法获得InetAddress的对象; InetAddress.getLocalHost(); InetAddress.getByName(""); 类主要方法: String - address.getHostName(); String - addre

VC环境下window网络程序:UDP Socket程序

最近在学Windows网络编程,正好在做UDPsocket的程序,贴上来: 服务器框架函数:              socket();    bind();    recfrom();  sendto();  closesocket(); 客户机框架函数:            socket();      recfrom();  sendto();  closesocket();

socket()接口与内核协议栈的挂接

最近在看Brdige的代码,发现一个问题,同样的调用ioctl接口实现添加网桥、删除网桥、网桥增加网卡、网桥删除网卡等操作,一个应用层的接口,却通过两条路径实现,sock_ioctl和RTNETLINK(这本就不是一个级别的东西),而应用层的brctl-utils源码中并没有直接使用PF_NETLINK协议簇的情况,让我感到非常奇怪,因此想把glibc到系统调用,到协议簇注册,以及和VFS的关系再

linux下的Socket网络编程教程

套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。

socket函数接收发送详解

http://blog.csdn.net/g_brightboy/article/details/12854117 http://blog.csdn.net/liangkaiyang/article/details/5931901 send。。。 这里只描述同步Socket的send函数的执行流程。 当调用该函数时,send先比较待发送数据的长度

linux下socket常用函数

1、setprotoent(打开网络协议的数据文件) 相关函数  getprotobyname, getprotobynumber, endprotoent 表头文件  #include <netdb.h> 定义函数  void setprotoent (int stayopen); 函数说明      setprotoent()用来打开/etc/protocols,如果参数

udp网络通信 socket

套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性,端口可以标定进程在主机的唯一性,那么socket通过IP+端口号就可以让两个在全网唯一标定的进程进行通信。 套接字有三种: 域间套接字:实现主机内部的进程通信的编程 原始套接字:使用网络层或者数据链路层的接口进行编程,更难更底层,例如制作抓包等网络工具 网络套接字:实现用户通信的编程 udp网络通信 服务端server 分

c# Socket编程基础知识

这一篇文章,将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解。 本文源代码,可以通过这里下载 http://files.cnblogs.com/chenxizhang/SocketWorkshop.rar   第一步:创建解决方案 第二步:创建服务端程序 这里可以选择“Console Application”这个类型,

C++与AS3中socket字节顺序

c++中默认字节顺序是大端,AS3中默认字节顺序是小端(见socket类中endian属性) 所以AS3与C++做socket通信时,无论发送还是接受C++消息时,需要修改字节顺序,例如 var bytes:ByteArray=new ByteArray; bytes.endian=Endian.LITTLE_ENDIAN;

Android中Socket通信之TCP与UDP传输原理

一、Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。 而Socket通信中基于TCP/IP协议的通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每