gdb:如何判断某段内存是否标记为只读
我正在调试一个程序(在Solaris中),该程序可能正在写入标记为只读的内存,但我不确定如何确定该内存页是否实际标记为只读gdb:如何判断某段内存是否标记为只读,gdb,solaris,readonly,Gdb,Solaris,Readonly,我正在调试一个程序(在Solaris中),该程序可能正在写入标记为只读的内存,但我不确定如何确定该内存页是否实际标记为只读 我可以和gdb一起做决定吗?如果没有,我可以使用什么?在Solaris上,您可以使用命令查看进程的地址空间,例如pmap。这将显示每个映射的r/w/x权限;以及其他信息 Solaris手册页中的示例: $ pmap 102905 102905: sh 00010000 192K r-x-- /usr/bin/ksh 00040000 8K rwx--
我可以和gdb一起做决定吗?如果没有,我可以使用什么?在Solaris上,您可以使用命令查看进程的地址空间,例如
pmap
。这将显示每个映射的r/w/x权限;以及其他信息
Solaris手册页中的示例:
$ pmap 102905
102905: sh
00010000 192K r-x-- /usr/bin/ksh
00040000 8K rwx-- /usr/bin/ksh
00042000 40K rwx-- [ heap ]
FF180000 664K r-x-- /usr/lib/libc.so.1
FF236000 24K rwx-- /usr/lib/libc.so.1
FF23C000 8K rwx-- /usr/lib/libc.so.1
FF250000 8K rwx-- [ anon ]
...
total 1880K
$pmap 102905
102905:sh
00010000 192K r-x--/usr/bin/ksh
00040000 8K rwx--/usr/bin/ksh
00042000 40K rwx--[堆]
FF180000664K r-x--/usr/lib/libc.so.1
FF236000 24K rwx--/usr/lib/libc.so.1
FF23C000 8K rwx--/usr/lib/libc.so.1
FF250000 8K rwx--[anon]
...
总数1880公里
查看数据和工具。最终是由于数据对齐问题导致的SEG故障。我还没有找到导致这种情况的根本原因,但它归结为一条汇编指令:
st%g1,[%g2]
。。。。其中,g2
寄存器包含地址0x602bf53e
——但它试图在该地址存储32位数量,但不在32位边界上。