资源简介

C语言UT单元测试中需要实现动态,本代码实现了该功能,原理和网络上的描述一样,通过修改机器指令实现。 平台是Linux

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#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_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1643  2014-07-27 17:29  stub\stub.c
     文件         319  2014-07-27 17:22  stub\stub.h
     文件         670  2014-07-27 17:30  stub\test_stub.c
     目录           0  2014-07-28 00:46  stub\

评论

共有 条评论