- 论坛徽章:
- 0
|
我还是有些不明白:
这个代码最关键的是
mmap(0x0, 0x1000, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS, 0, 0)
MAP_FIXED的作用就是强行映射到指定的addr的位置。
MAP_ANONYMOUS将忽略 fd和offset参数。
疑问一:
既然没有传入fd,那么到底把哪个文件或者内存映射到了地址0呢?
难道是内核空间的内存?
疑问二:
return sock->ops->sendpage(sock, page, offset, size, flags);
在内核空间执行时应该看到的是进程的全部4G空间。
这个跳转到0地址执行,这个0地址指的是进程的虚拟地址0吗?
如果是进程空间的虚拟地址0,那么为什么不直接在进程的虚拟地址0直接写入jmp指令呢?
到底为什么要作mmap呢?
疑问三:
sock->ops->sendpage
到底在什么情况下是NULL呢?难道内核的sendpage就不能用吗?
还是只有
socket(PF_PPPOX, SOCK_DGRAM, 0)才会导致sendpage指针为NULL呢?
[ 本帖最后由 emmoblin 于 2009-8-21 00:00 编辑 ] |
|