草庐IT

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内部使用它,它几乎没有关于它正在执行的代码的信息来获得常数的近似值。是的,我意识到我可

c - "__gmon_start__"符号是什么?

我正在使用gcchello.c-ohello-O3编译这段代码:#includeintmain(void){printf("Helloworld\n");return0;}当我列出我得到的搬迁时:test@southpark$readelf-rhello|grepgmon080495a400000106R_386_GLOB_DAT00000000__gmon_start__080495b400000107R_386_JUMP_SLOT00000000__gmon_start__当我在这个文件中列出符号时,我得到:test@southpark$readelf-shello|grepgmo

c - "__gmon_start__"符号是什么?

我正在使用gcchello.c-ohello-O3编译这段代码:#includeintmain(void){printf("Helloworld\n");return0;}当我列出我得到的搬迁时:test@southpark$readelf-rhello|grepgmon080495a400000106R_386_GLOB_DAT00000000__gmon_start__080495b400000107R_386_JUMP_SLOT00000000__gmon_start__当我在这个文件中列出符号时,我得到:test@southpark$readelf-shello|grepgmo

c - 我怎样才能用ffmpeg寻求框架X?

我正在编写一个视频编辑器,我需要寻找精确的帧,知道帧数。stackoverflow上的其他帖子告诉我,ffmpeg可能会在搜索后给我一些破帧,这对播放来说不是问题,但对视频编辑来说是个大问题。而且我需要按帧数查找,不是按时间查找,转换为帧数时会变得不准确。我读过dranger的tuts(现在已经过时了),结果是:av_seek_frame(fmt_ctx,video_stream_id,frame,AVSEEK_FLAG_ANY);它总是寻求框号。0,并且始终返回0,表示成功。然后我尝试阅读Blender的源代码,发现它真的很复杂(也许我应该实现一个图像缓冲区?)。那么,是否有任何简单

c - 我怎样才能用ffmpeg寻求框架X?

我正在编写一个视频编辑器,我需要寻找精确的帧,知道帧数。stackoverflow上的其他帖子告诉我,ffmpeg可能会在搜索后给我一些破帧,这对播放来说不是问题,但对视频编辑来说是个大问题。而且我需要按帧数查找,不是按时间查找,转换为帧数时会变得不准确。我读过dranger的tuts(现在已经过时了),结果是:av_seek_frame(fmt_ctx,video_stream_id,frame,AVSEEK_FLAG_ANY);它总是寻求框号。0,并且始终返回0,表示成功。然后我尝试阅读Blender的源代码,发现它真的很复杂(也许我应该实现一个图像缓冲区?)。那么,是否有任何简单

c - ELF 对象文件和共享对象之间的 ELF header 有哪些区别?

首先,我是从技术角度而不是库代码用户的角度来问这个问题。差异的一个例子是共享对象包含程序头,而普通对象文件不包含。还有哪些区别?至于我的问题的目的,我试图弄清楚需要从共享目标文件中删除哪些内容才能让链接器将其视为普通目标文件并尝试将其重新定位和静态链接到生成的可执行文件,而不是将其标识为共享库并生成DT_NEEDED引用。这反过来又是将共享库原始“转换”为可以静态链接的东西的第一步(但是,可能需要进一步的工作来使重定位可满足)。 最佳答案 您会发现其中一个主要区别是,在最后的链接阶段,许多C库组件静态链接到库中,形成INIT和FIN

c - ELF 对象文件和共享对象之间的 ELF header 有哪些区别?

首先,我是从技术角度而不是库代码用户的角度来问这个问题。差异的一个例子是共享对象包含程序头,而普通对象文件不包含。还有哪些区别?至于我的问题的目的,我试图弄清楚需要从共享目标文件中删除哪些内容才能让链接器将其视为普通目标文件并尝试将其重新定位和静态链接到生成的可执行文件,而不是将其标识为共享库并生成DT_NEEDED引用。这反过来又是将共享库原始“转换”为可以静态链接的东西的第一步(但是,可能需要进一步的工作来使重定位可满足)。 最佳答案 您会发现其中一个主要区别是,在最后的链接阶段,许多C库组件静态链接到库中,形成INIT和FIN

c - 如何通过C中的PID监视外部进程的事件?

是否有任何具有某些功能的库,允许其pid_t监视外部进程的事件?我的意思是,监视外部进程是否已退出,或者是否已创建一个或多个子进程(使用fork),或者是否已变成另一个可执行镜像(通过exec或posix_spawn函数族调用),或者是否检测到Unix信号。交付给它。编辑我需要一些不会干扰正在监视的程序的执行的东西。因此,我不应该使用ptrace,因为它会在发出某种信号时停止正在监视的进程,并且有必要在发生这种情况时恢复该进程。 最佳答案 使用捕获fork()的预加载库运行目标二进制文件。只要所有子进程也都使用预加载库,无论执行如何

c - 如何通过C中的PID监视外部进程的事件?

是否有任何具有某些功能的库,允许其pid_t监视外部进程的事件?我的意思是,监视外部进程是否已退出,或者是否已创建一个或多个子进程(使用fork),或者是否已变成另一个可执行镜像(通过exec或posix_spawn函数族调用),或者是否检测到Unix信号。交付给它。编辑我需要一些不会干扰正在监视的程序的执行的东西。因此,我不应该使用ptrace,因为它会在发出某种信号时停止正在监视的进程,并且有必要在发生这种情况时恢复该进程。 最佳答案 使用捕获fork()的预加载库运行目标二进制文件。只要所有子进程也都使用预加载库,无论执行如何