我遇到了一个示例 gdbinit 文件,其中包含以下语句。谁能告诉我地址(0x40000000、0x80000000 和 0xBF000000)有什么特别之处?为什么再次检查他们让我知道有效或无效地址?
define dd
if ( ($arg0 & 0x40000000) || ($arg0 & 0x08000000) || ($arg0 & 0xBF000000) )
set $data_addr=$arg0
ddump 0x10 $arg0
else
printf "Invalid address: %08X\n", $arg0
end
end
此外,以下针对相同地址的检查如何再次告诉我为数据地址选择哪个寄存器?
define datawin
if ( ($esi & 0x40000000) || ($esi & 0x08000000) || ($esi & 0xBF000000) )
set $data_addr=$esi
else
if ( ($edi & 0x40000000) || ($edi & 0x08000000) || ($edi & 0xBF000000) )
set $data_addr=$edi
else
if ( ($eax & 0x40000000) || ($eax & 0x08000000) || ($eax & 0xBF000000) )
set $data_addr=$eax
else
set $data_addr=$esp
end
任何帮助将不胜感激。谢谢。