微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内存块上的C写/读检测

我想问一下,如果有人有任何想法如何检测一个写分配内存地址。

起初我使用mprotect和sigaction一起进行写/读操作时强制出现分段错误

这种方法有两个负面因素:

是难以通过分段故障

mprotect中的内存地址传递必须与页面边界alignment,也就是说不能用一个简单的malloc来处理这个内存地址。

澄清问题:

C ++复制拥有POSIX文件描述符的对象的构造函数

在Ubuntu 12.04上设置ncurses库

使用FindControl无法从UserControl获取UIElement

如何使用C#将CSV数据粘贴到Windows剪贴板

任务pipe理器是Windows 10的一个特殊的“总是在最前面”窗口?

我在C中构build一个用于集群环境的应用程序。 在某些时候,我分配内存,我调用本地主机中的缓冲区,并分配一些数据。 这个缓冲区将被发送到远程节点并具有相同的过程。 在同一点,这个缓冲区将在远程节点被写入/读取,但是我不知道什么时候(将使用DMA来写/读缓冲区),必须通知本地主机关于缓冲区修改。 就像我上面说的,我已经使用了一些机制,但没有一个能够处理它。 现在我只想要一些想法。

每个不同的想法在这里受欢迎。

谢谢

Unix上共享库的困境

_ftime / Windows内部时间如何工作?

Linux / C:将pipe道redirect到STDIN / STDOUT

将上下文菜单添加到操作系统范围内的所有文本框

虚拟地址如何转换为后台存储上的物理地址?

你可以使用硬件断点。 缺点是这是硬件特定的,只能设置有限数量的断点。 此外,大多数情况下,这些工具不是特定于任务的,所以如果您运行多个程序实例,他们将共享可用“插槽”的数量

x86架构具有可用于设置硬件内存断点的调试寄存器(请参阅: http : //en.wikipedia.org/wiki/X86_debug_register )。

如果你想测试这个,你可以使用GDB来设置硬件断点。 您可以使用GDB的“watch”命令将硬件内存断点放置在变量上。

请注意,使用调试寄存器和mprotect()只是方法来完成你所要求的工作,我不认为它们是做内存管理的良好工程实践(你可能试图在这里做的)。 也许你可以更多地解释你在更高级别上做什么: http : //catb.org/esr/faqs/smart-questions.html#goal

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐