#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <errno.h>
#include <limits.h>
#include <sys/mman.h>
#include "stub.h"
static long pagesize = -1;
static inline void *pageof(const void* p)
{
return (void *)((unsigned long)p & ~(pagesize - 1));
}
void stub_set(struct func_stub *pstub, void *fn, void *fn_stub)
{
pstub->fn = fn;
memcpy(pstub->code_buf, fn, CODESIZE);
if (-1 == mprotect(pageof(fn), pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC))
{
perror("mprotect to w+r+x faild");
exit(errno);
}
*(unsigned char *)fn = (unsigned char)0xE9;
*(unsigned int *)((unsigned char *)fn + 1) = (unsigned char *)fn_stub - (unsigned char *)fn - CODESIZE;
if (-1 == mprotect(pageof(fn), pagesize * 2, PROT_READ | PROT_EXEC))
{
perror("mprotect to r+x failed");
exit(errno);
}
return;
}
void stub_reset(struct func_stub *pstub)
{
if (NULL == pstub->fn)
{
return;
}
if (-1 == mprotect(pageof(pstub->fn), pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC))
{
perror("mprotect to w+r+x faild");
exit(errno);
}
memcpy(pstub->fn, pstub->code_buf, CODESIZE);
if (-1 == mprotect(pageof(pstub->fn), pagesize * 2, PROT_READ | PROT_EXEC))
{
perror("mprotect to r+x failed");
exit(errno);
}
memset(pstub, 0, sizeof(struct func_stub));
return;
}
int stub_init(void)
{
int ret;
pagesize = sysconf(_SC_PAGE_SIZE);
ret = 0;
if (pagesize < 0)
{
perror("get system _SC_PAGE_SIZE configure failed");
ret = -1;
}
return ret;
}
Linux C 动态打桩实现
4星 · 超过85%的资源 需积分: 50 32 浏览量
2014-08-01
23:17:28
上传
评论 5
收藏 2KB ZIP 举报
popo00fa
- 粉丝: 46
- 资源: 15
最新资源
- 基于CarNet实现裂缝检测python源码+文档说明+数据+图片(课程设计)
- 课程设计-基于耐火材料裂缝剥落检测python源码+课件
- 基于OpenCV的视频道路车道检测python源码+文档说明+实验演示+图片+使用方法(高分毕业设计)
- 基于OpenCV的案例:图像边缘、角点和轮廓检测,图像分割,图像增强;图片拼接;运动目标检测,颜色直方图比较,三帧帧差法,抠图
- SmartPlug-html大一笔记
- SmartPlug-proteusdemo
- Preliminary Findings on Handmade Rattan Baby Crib andBassinet Designs Regarding.zip
- aveebfq_v1.2.83_downyi.com.apk
- 基于有机发光二极管(OLED)的建模优化算法的matlab仿真源码+数据+文档说明+项目说明(高分课程设计)
- hash01-test.c 本人哈希表(一)的示例代码,仅供参考!
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页