我试图读取访问内核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。如果有人可以为我指出问题,那我就是浮石。
谢谢
答案 0 :(得分:2)
start_code
只是作为代码映射的进程的一部分。这可能会超出流程的实际代码。特别是,大多数可执行文件将作为代码段的一部分映射到它们自己的文件头(ELF头)中。这就是你在缓冲区中看到的。
读取更多字节,您最终会看到实际代码。