gdb:如何判断某段内存是否标记为只读

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--

我正在调试一个程序(在Solaris中),该程序可能正在写入标记为只读的内存,但我不确定如何确定该内存页是否实际标记为只读


我可以和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位边界上。