草庐IT

exec_proc

全部标签

c -/proc/[pid]/pagemaps 和/proc/[pid]/maps | Linux

我正在努力了解标题中提到的两个文件。我已经查过这些位是什么;但是,我无法理解如何从它们中提取有用的信息(或者我只是以错误的方式接近它)。让我解释一下:页面映射是一个相当新的“特征”伪文件,它包含分配给当前[pid]的虚拟页面的物理框架信息。也就是说,给定一个从地址x开始的虚拟页面,假设虚拟地址开始为“vas”,我可以使用vas索引页面映射文件以获取映射的物理页面框架的64位。这些位包含有关该虚拟页面的信息。然而,当我提取位并进行一些移位时,我迷失了所见。位表示如下:0-54是页框号,55-60是页移,第63位是当前位,还有一些我不太感兴趣的位。在我使用/proc/[pid]/maps中

c - 如何在GDB中调试fork-exec进程的入口点?

我有一个Clinux应用程序(A),它在启动时生成另一个进程(P)。当我想调试P时,我像往常一样启动A,然后使用ddd/gdb连接到P。当我想调试P的入口点(main的开始)时出现问题。如果我在将调试器连接到P时遵循通常的方法,已经太晚了。我找到的解决方案是在P的主体开始时插休眠眠,这样我就有时间连接gdb,但这不是一个非常优雅的解决方案。我也尝试过使用asm("int$3")但它似乎不起作用。你知道我该如何解决这个问题吗?(最好不改变A或P的代码) 最佳答案 你应该使用这个选项:setfollow-fork-modemodeWhe

c - 如何在GDB中调试fork-exec进程的入口点?

我有一个Clinux应用程序(A),它在启动时生成另一个进程(P)。当我想调试P时,我像往常一样启动A,然后使用ddd/gdb连接到P。当我想调试P的入口点(main的开始)时出现问题。如果我在将调试器连接到P时遵循通常的方法,已经太晚了。我找到的解决方案是在P的主体开始时插休眠眠,这样我就有时间连接gdb,但这不是一个非常优雅的解决方案。我也尝试过使用asm("int$3")但它似乎不起作用。你知道我该如何解决这个问题吗?(最好不改变A或P的代码) 最佳答案 你应该使用这个选项:setfollow-fork-modemodeWhe

linux - 如何在 linux/unix 中找到 -exec cd

我正在搜索配置文件夹,并尝试切换到该目录:find.-name"config"-execcd{}\;有一个匹配项,./my-applications/config,但在我尝试这个之后它说:find:`cd':Nosuchfileordirectory我做错了什么? 最佳答案 命令cd是一个内置的shell,在/bin或/usr/bin中找不到。当然,您不能将目录更改为文件,您的搜索也不限于目录。而cd命令只会影响执行的命令,不会影响执行find命令的父shell。使用:cd$(find.-nameconfig-typed|sed1q

linux - 如何在 linux/unix 中找到 -exec cd

我正在搜索配置文件夹,并尝试切换到该目录:find.-name"config"-execcd{}\;有一个匹配项,./my-applications/config,但在我尝试这个之后它说:find:`cd':Nosuchfileordirectory我做错了什么? 最佳答案 命令cd是一个内置的shell,在/bin或/usr/bin中找不到。当然,您不能将目录更改为文件,您的搜索也不限于目录。而cd命令只会影响执行的命令,不会影响执行find命令的父shell。使用:cd$(find.-nameconfig-typed|sed1q

c - 有没有比解析/proc/self/maps 更好的方法来找出内存保护?

在Linux(或Solaris)上,有比手动解析/proc/self/maps更好的方法来确定您是否可以读取、写入或执行存储在一个或内存中有更多地址?例如,在Windows中您有VirtualQuery。在Linux中,我可以mprotect来更改这些值,但我无法读回它们。此外,除了做一些非常具有侵入性的事情和使用ptrace之外,还有什么方法可以知道这些权限何时更改(例如,当有人在我背后对文件使用mmap时)>在进程中的所有线程上拦截任何可能影响内存映射的系统调用尝试?更新:不幸的是,我在一个JIT内部使用它,它几乎没有关于它正在执行的代码的信息来获得常数的近似值。是的,我意识到我可

c - 有没有比解析/proc/self/maps 更好的方法来找出内存保护?

在Linux(或Solaris)上,有比手动解析/proc/self/maps更好的方法来确定您是否可以读取、写入或执行存储在一个或内存中有更多地址?例如,在Windows中您有VirtualQuery。在Linux中,我可以mprotect来更改这些值,但我无法读回它们。此外,除了做一些非常具有侵入性的事情和使用ptrace之外,还有什么方法可以知道这些权限何时更改(例如,当有人在我背后对文件使用mmap时)>在进程中的所有线程上拦截任何可能影响内存映射的系统调用尝试?更新:不幸的是,我在一个JIT内部使用它,它几乎没有关于它正在执行的代码的信息来获得常数的近似值。是的,我意识到我可

linux - 来自/proc 的可能的内部套接字状态列表

我想知道/proc/net/tcp中st列的可能值。我认为st列等同于netstat(8)或ss(8)中的STATE列。我已经设法识别了三个代码:sllocal_addressrem_addresssttx_queuerx_queuetrtm->whenretrnsmtuidtimeoutinode0:0100007F:08A000000000:00000A00000000:0000000000:00000000000000000073211ffff81002f4499803000002-11:00000000:006F00000000:00000A00000000:000000000

linux - 来自/proc 的可能的内部套接字状态列表

我想知道/proc/net/tcp中st列的可能值。我认为st列等同于netstat(8)或ss(8)中的STATE列。我已经设法识别了三个代码:sllocal_addressrem_addresssttx_queuerx_queuetrtm->whenretrnsmtuidtimeoutinode0:0100007F:08A000000000:00000A00000000:0000000000:00000000000000000073211ffff81002f4499803000002-11:00000000:006F00000000:00000A00000000:000000000

c - exec 和 execve 等系统调用的 exec 系列的功能有什么区别?

我最近一直在学习系统编程类(class),并且完成了系统调用exec()和execve()。目前为止我找不到这两者有什么区别,维基百科也没有给出明确的解释,所以exec()和execve()有什么区别。请有人能简要描述一下exec系列系统调用,例如execl()、execv()、execle()、execvp()。 最佳答案 没有exec系统调用——这通常用来指代所有execXX调用作为一个整体。它们本质上都做同样的事情:将新程序加载到当前进程中,并为其提供参数和环境变量。不同之处在于如何找到程序、如何指定参数以及环境来自何处。名称