小编Tob*_*gel的帖子

mmap相关分段故障

我正在编写一个模拟器,我需要将机器代码直接写入内存,然后跳转到(调用)它.我用mmap分配内存,然后将代码写入其中.除了"ret"或"nop"指令之外的任何其他段落.我知道mmap返回没有错误,我已经在一个示例中分离了问题,我把它放在一起来说明问题.

#include <stdio.h>
#include <sys/mman.h>
#include <stdint.h>

int main()
{
  uint8_t *data = mmap(NULL, 3 * sizeof(uint8_t), PROT_EXEC|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0), *p;
  p = data;
  if(data) {
    *p++ = 0xb8; //mov $1, %eax
    *p++ = 0x01;
    *p++ = 0xC3; //ret
  } else
    perror("mmap");

  uint8_t (*fp)();
  fp = (void*) (data);
  printf("%u\n",(uint8_t) fp());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

那个例子产生了问题.救命?

编辑:我应该提到我在Linux 2.6,x86上.

c x86 assembly mmap segmentation-fault

0
推荐指数
1
解决办法
1281
查看次数

标签 统计

assembly ×1

c ×1

mmap ×1

segmentation-fault ×1

x86 ×1