Linux内核模块复制.text段的进程

时间:2014-12-20 16:35:46

标签: c linux linux-kernel kernel

我试图读取访问内核API的进程的代码段。 我使用mm_struct来获取所述进程的代码段的第一个和最后一个地址。 (参考:http://www.makelinux.net/books/lkd2/ch14lev1sec1)。 然后我尝试使用copy_from_user()函数复制地址的内容,使用以下代码:

 char code[10];
 unsigned long copy_ans;
 copy_ans = copy_from_user(code, current->mm->start_code, 10); 
 //10 is the number of bytes that should be copied. 

它似乎真正地复制了十个字节,以及"代码"的值。总是:

  

\ x7fELF \ X02 \ X01 \ X01

我开始怀疑这甚至从地址读取,而不仅仅是将地址的值转换为char。如果有人可以为我指出问题,那我就是浮石。

谢谢

1 个答案:

答案 0 :(得分:2)

start_code只是作为代码映射的进程的一部分。这可能会超出流程的实际代码。特别是,大多数可执行文件将作为代码段的一部分映射到它们自己的文件头(ELF头)中。这就是你在缓冲区中看到的。

读取更多字节,您最终会看到实际代码。