问题标签 [mprotect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 绕道并使用 _thiscall 作为钩子(GCC 调用约定)
我最近一直在研究迂回函数(仅在 Linux 中),到目前为止我已经取得了巨大的成功。在我发现这个之前,我一直在开发自己的绕道课程。我对代码进行了一些现代化改造,并将其转换为 C++(当然是一类)。该代码就像任何其他迂回实现一样,它将原始函数地址替换为我自己指定的“挂钩”函数的 JMP。它还为原始功能创建了一个“蹦床”。
一切都完美无缺,但我想做一个简单的调整。我用纯 C++ 编程,我不使用全局函数,所有内容都包含在类中(就像 Java/C# 一样)。问题是这种迂回方法打破了我的模式。“钩子”函数必须是静态/非类函数。
我想做的是实现对 _thiscall 钩子的支持(这对于 GCC _thiscall约定应该很简单)。我没有成功修改此代码以使用 _thiscall 挂钩。我想要的最终结果就是这样简单;PatchAddress(void * target, void * hook, void * class);
. 我没有要求任何人为我做这件事,但我想知道如何解决/解决我的问题?
据我所知,我只需要增加“补丁”的大小(即现在是 5 个字节,我应该需要额外的 5 个字节吗?),然后在我使用 JMP 调用(到我的钩子函数)之前,我将我的“this”指针推送到堆栈(应该就像我将它作为成员函数调用一样)。为了显示:
而不是直接/仅进行“jmp”调用。这是正确的方法还是需要考虑下面的其他内容(注意:我不关心对 VC++ _thiscall 的支持)?
c - 内存块上的 C 写/读检测
我想问一下是否有人知道如何检测分配内存地址上的写入。
起初,我使用 mprotect 和 sigaction 在进行写/读操作时强制出现分段错误。
这种方法有两个负面因素:
- 是难以通过分段错误
- mprotect 中的内存地址传递必须与页面边界对齐,即不可能使用简单的 malloc 处理此内存地址。
为了澄清问题:
我在 C 中为集群环境构建了一个应用程序。在某些时候,我分配了我在本地主机中调用缓冲区的内存并分配了一些数据。该缓冲区将被发送到远程节点并具有相同的过程。同时,该缓冲区将在远程节点中写入/读取,但我不知道何时(它将使用 DMA 写入/读取缓冲区),必须通知本地主机有关缓冲区修改。就像我上面说的,我已经使用了一些机制,但没有一个能够以某种能力处理它。现在我只是想要一些想法。
这里欢迎每一个不同的想法。
谢谢
c - 使用 mmap 映射的内存,并与 mprotect 一起使用
我必须为线程提供内存区域并应用内存管理的基本概念。这个想法是创建一个线程本地存储,并通过写入、读取、克隆和擦除来管理。问题是当我尝试使用 mprotect 取消保护与 TLS 中的线程关联的页面时,这会向我发送一个错误。这是我的结构:
每页的分配
它是由 mmap 映射的,但是当我尝试使用此代码保护页面时(或取消保护我有同样的错误,这是我第一次尝试)
以及 tls_unprotect 方法:
保护方法是一样的。
errorno 代码是 12。
我感谢任何形式的帮助。谢谢。
c - linux c mmap/mprotect问题
我需要做一个小 sw 需要保护一个页面进行读/写,然后当访问内存时,它需要增加一个计数器并允许读/写,然后它需要保护内存
我有这段代码,但它导致了无限循环
c - numa:下一次接触政策
谁能解释如何在 NUMA 系统上使用“mprotect”来实施“next-touch”策略?假设我有一个整数数组 A,我使用“mprotect”保护它。接下来,每当任何线程尝试访问它时,我只会获得有关尝试访问的单个地址的信息(c-sigsegv-handler-mprotect)。接下来我该怎么做?如果有人可以根据“下一次接触”政策解释所需的所有步骤(从头开始),那就太好了,谢谢!
xcode - 使代码可写
下午好。
我在一本书上得到了下面的代码。我正在尝试执行它,但我不知道 MakeCodeWritable 函数上的“第一个”和“最后一个”参数是什么,或者在哪里可以找到它们。有人可以帮忙吗?这段代码是关于 C 混淆方法的。我正在使用 Xcode 程序和 LLVM GCC 4.2 编译器。
mmap - 检测 mprotected 内存地址
是否有功能可以检测映射的给定虚拟地址mmap
是否受保护mprotect
?如果设置了访问这样的地址将导致分段错误PROT_NONE
。所以我想首先检测它们是否受到保护。
如果我不需要引入信号处理程序会更好。如果没有这样的功能,任何其他轻量级的解决方案也可以。谢谢。
c - 保护分配的内存
我需要动态分配一些内存部分,每个部分都有一些保护 - RW 或 RX。
我试图通过分配内存malloc
,但mprotect
总是返回-1 Invalid argument
。
我的示例代码:
c - 如何将 malloc 约束到特定的内存区域
有没有什么:
- 分配/解除分配/重新分配许多可变大小的对象而没有碎片(基本上是什么
malloc
)和 - 跟踪用于这些分配的所有内存页面,以便我可以
- 稍后
mprotect
将所有这些页面设为只读 - 最好没有任何锁定 - 所有访问都将是单线程的
- 可以在 Linux 和 OS X 上运行,最好在 Windows 上使用等效的东西?
我想不出用标准内存分配函数来做这件事的方法。想到的唯一策略是使用自定义内存池而不是malloc
. 所以我的问题是:有没有办法在没有自定义malloc
或(如果没有)关于使用什么的建议的情况下做到这一点?
我可以很容易地包装malloc
并跟踪它使用过的所有页面我如何保证一旦我调用mprotect
了这些页面malloc
就不会尝试使用在分配块开始之前或结束之后“捕获”的内存在受影响的页面之一内?
linux - Linux 内核中的类似 mprotect() 的功能
我在一个 Linux 内核模块中,我分配了一些内存,比如vmalloc()
. 我想让内存有读、写和执行权限。这样做的干净和适当的方法是什么?基本上,这通常等同于调用mprotect()
,但在内核空间中。
如果我执行 page walk, pgd_offset()
, pud_offset()
, pmd_offset()
, pte_offset_map()
, 然后pte_mkwrite()
, 我在 2.6.39 上尝试时遇到链接错误。此外,如果我在进行页面遍历,这似乎是一种 hack,应该有一种更清洁、更合适的方法。
我的内核模块将是一个可加载模块,因此我无法使用内部符号。
提前感谢您的指导。