小编Rya*_*bot的帖子

GDB无法访问mmap()'d内核分配的内存?

我遇到了GDB和内核空间中分配的缓冲区问题.缓冲区由内核模块分配,内核模块应该分配连续的内存块,然后通过mmap()调用将内存映射到用户空间.但是,GDB似乎无法随时访问这些块.例如,在GDB中遇到断点后:

(gdb) x /10xb 0x4567e000
0x4567e000:     Cannot access memory at address 0x4567e000
Run Code Online (Sandbox Code Playgroud)

但是,在/ proc // smaps中查看应用程序当前映射的内存区域显示:

4567e000-456d3000 rwxs 8913f000 00:0d 883        /dev/cmem
Size:                340 kB
Rss:                 340 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Swap:                  0 kB
Run Code Online (Sandbox Code Playgroud)

我甚至考虑这个的原因是因为在运行期间的某个时刻,这个缓冲区地址(或以类似方式分配的另一个)会导致SIGSEGV.

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x49aea490 (LWP 652)]
0x402e4ea8 in fwrite () from /lib/libc.so.6
(gdb)
(gdb)
(gdb) where
#0  0x402e4ea8 in fwrite () from /lib/libc.so.6
#1 …
Run Code Online (Sandbox Code Playgroud)

c c++ gdb mmap

4
推荐指数
1
解决办法
5259
查看次数

标签 统计

c ×1

c++ ×1

gdb ×1

mmap ×1