Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么';这是模拟SIGSEGV后成功的方法_C_Signals_Memory Mapping - Fatal编程技术网

C 什么';这是模拟SIGSEGV后成功的方法

C 什么';这是模拟SIGSEGV后成功的方法,c,signals,memory-mapping,C,Signals,Memory Mapping,我在对已知内存块进行读/写操作时捕获了一个SIGSEGV。这个方块是在我的控制下移动的,所以它可以被操纵。我想模拟读/写操作,实际处理数据并继续应用程序。我有两种可能的解决方案,但它们似乎都太复杂了。我希望有更好的方法来实现这一点: 借用调试器的技巧,并: mmap该区域并进行保护 等待SIGSEGV 从指令类型获取读/写大小 对于读取,请将所需的数据放入内存并删除保护 单步启动应用程序 对于写操作,请阅读所写内容并进行处理 在单步TRAP中,再次保护页面并继续应用程序 对指令本身进行疯狂的

我在对已知内存块进行读/写操作时捕获了一个
SIGSEGV
。这个方块是在我的控制下移动的,所以它可以被操纵。我想模拟读/写操作,实际处理数据并继续应用程序。我有两种可能的解决方案,但它们似乎都太复杂了。我希望有更好的方法来实现这一点:

  • 借用调试器的技巧,并:

    • mmap该区域并进行保护
    • 等待
      SIGSEGV
    • 从指令类型获取读/写大小
    • 对于读取,请将所需的数据放入内存并删除保护
    • 单步启动应用程序
    • 对于写操作,请阅读所写内容并进行处理
    • 在单步
      TRAP
      中,再次保护页面并继续应用程序
  • 对指令本身进行疯狂的处理,然后:

    • mmap该区域并进行保护
    • 等待
      SIGSEGV
    • eip
      下获取指令并模拟其效果
    • 指示后返回
  • 应用程序未在根帐户下运行,以防万一

    我假设x86_64,目前并不真正关心其他平台。

    相关:似乎是重复的:--或者如果不是,请解释一下为什么这不是重复的?