gpt4 book ai didi

c - 如何在linux内核的memcpy函数中添加一个hook?

转载 作者:IT王子 更新时间:2023-10-29 00:44:43 24 4
gpt4 key购买 nike

以下是我的步骤,但没有按预期工作。

linux-3.16-rc2\arch\x86\lib\memcpy_64.S:

改变了

ENTRY(__memcpy)
ENTRY(memcpy)
...
CFI_ENDPROC
ENDPROC(memcpy)
ENDPROC(__memcpy)

到:

ENTRY(__memcpy)
ENTRY(x86_memcpy)
...
CFI_ENDPROC
ENDPROC(x86_memcpy)
ENDPROC(__memcpy)

linux-3.16-rc2\lib\string.c:

改变了

#ifndef __HAVE_ARCH_MEMCPY
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;

while (count--)
*tmp++ = *s++;
return dest;
}
#endif

到:

//#ifndef __HAVE_ARCH_MEMCPY
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
my_hook();
while (count--)
*tmp++ = *s++;
return dest;
}
//#endif

删除 arch/x86/kernel/x8664_ksyms_64.c 中的 EXPORT_SYMBOL(memcpy)

在linux-3.16-rc2\mm\memcpy_test.c中添加测试代码:

#include <linux/mm.h>
#include <linux/kallsyms.h>
#include <linux/module.h>
int hook_value = -1;
int test_begin = 0;
void my_test_begin(void)
{
char src[128] = {0};
char dst[128] = {1};
test_begin = 1;
mb();
memcpy((char*)dst,(char*)src,50);
test_begin = 0;
mb();
printk("hook value:%d\n",hook_value);
}

void my_hook(void)
{
if(test_begin)
hook_value=1;
}

调用my_test_begin后,发现hook_value一直为-1,看来my_test_begin中的memcpy一直没有达到hook_value=1谁能帮忙?谢谢!

最佳答案

感谢@Basile Starynkevitch我解决了这个问题,是的,'Sometimes, the compiler is optimizing memcpy to __builtin_memcpy'

关于c - 如何在linux内核的memcpy函数中添加一个hook?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25409724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com