当前位置: 首页 > 面试题库 >

如何在Linux用户空间应用程序中测试地址是否可读

宦源
2023-03-14
问题内容

出于调试目的,我需要测试一个指针以查看其是否指向有效的可读页面。目前,我正在解析/ proc / [pid] /
maps来查看地址是否映射正确,但这似乎有点麻烦。有没有更好的办法?谢谢。


问题答案:

规范的方法是使用write()系统调用从页面读取(写入虚拟pipe()文件描述符)。如果传递给它的缓冲区不可读,它将返回-1with
errno == EFAULTwrite()不是出错。



 类似资料:
  • 问题内容: 在运行Linux的基于ARM的系统上,我有一个将内存映射到物理地址的设备。从所有地址都是虚拟的用户空间程序中,如何从该地址读取内容? 问题答案: 您可以使用系统调用将设备文件映射到用户进程内存。通常,设备文件是物理内存到文件系统的映射。否则,您必须编写一个内核模块来创建此类文件或提供一种将所需内存映射到用户进程的方法。 另一种方法是将/ dev / mem的部分重新映射到用户内存。 编

  • 问题内容: 我想找到用户空间进程中定义的变量的物理地址吗?有什么办法可以使用root特权吗? 问题答案: 首先,您为什么要这样做?现代VM系统的目的是使应用程序程序员摆脱物理内存布局的复杂性。给他们每个人一个统一的地址空间,使他们的生活更轻松。 如果确实要执行此操作,则几乎确实需要使用内核模块。以常规方式获取变量的虚拟地址,使用它来索引进程页面表并读取找到的值(框架的物理地址)。然后添加页面偏移量

  • 问题内容: 大概有一个库或简单的asm blob,可以获取我正在执行的当前CPU的编号。 问题答案: 使用以确定在其上调用线程运行的CPU。请参阅(系统调用)和(库包装器)。但是,请注意其内容: 仅在调用时保证放置在cpu中的信息是最新的:除非已使用sched_setaffinity(2)修复了CPU关联性,否则内核可能随时更改CPU。(通常不会发生这种情况,因为调度程序会尝试最大程度地减少CPU

  • 问题内容: 似乎在Windows 32位上,内核将从全部4G用户虚拟内存空间中保留1G虚拟内存,并将 某些 内核空间映射到此1G空间中。 所以我的问题是: 在32位Linux上是否有类似情况? 如果是这样,我们如何看到整个内存布局? 我认为 只能看到某些过程的用户空间布局。 谢谢! 问题答案: 实际上,在32位Windows上,如果没有引导选项,内核将映射到线性地址空间的前2GB,剩下2GB的空间

  • 问题内容: 我正在使用2.6.24.3内核为嵌入式Linux项目开发用户空间应用程序。我的应用程序通过创建2个pthread在两个文件节点之间传递数据,每个pthread都hibernate,直到异步IO操作完成,然后唤醒并运行完成处理程序。 完成处理程序需要跟踪待处理的传输数量,并维护几个线程列表,一个线程将添加到该列表中,而另一个线程将删除该列表。 我的问题是… 有没有一种简单的方法可以阻止当

  • 问题内容: 有时,通过按主屏幕按钮可以关闭应用程序,并且不会调用onDestroy()。我想在整个应用程序关闭时调用一个方法,而我不会在所有活动的onDestroy()中调用我的方法。 问题答案: 在appication类内实现LifecycleObserver然后用作打击: 也可以使用其他事件,例如Lifecycle.Event.ON_DESTROY或ON_CREATE