8

Linuxカーネルモジュールを作成していますが、実行可能ページを割り当てたいと思います。Plainkmalloc()は実行不可能なページ内にポインタを返し、そこでコードを実行するとカーネルパニックが発生します。Ubuntu Karmic x86、2.6.31-20-generic-paeで動作する必要があります。

4

2 に答える 2

11
#include <linux/vmalloc.h>
#include <asm/pgtype_types.h>
...
char *p = __vmalloc(byte_size, GFP_KERNEL, PAGE_KERNEL_EXEC);
...
if (p != NULL) vfree(p);
于 2010-03-16T23:31:54.483 に答える
1
/**
 * vmalloc_exec - allocate virtually contiguous, executable memory
 * @size:     allocation size
 *
 * Kernel-internal function to allocate enough pages to cover @size
 * the page level allocator and map them into contiguous and
 * executable kernel virtual space.
 *
 * For tight control over page level allocator and protection flags
 * use __vmalloc() instead.
 *
 * Return: pointer to the allocated memory or %NULL on error
 */
void *vmalloc_exec(unsigned long size)
{
    return __vmalloc_node(size, 1, GFP_KERNEL, PAGE_KERNEL_EXEC,
                  NUMA_NO_NODE, __builtin_return_address(0));
}
于 2019-05-31T02:49:59.873 に答える