lldb查看32位Intel Mac程序随机地址时高位为何显示0xffffff?
关于lldb显示内存时字节带0xffffff前缀的解释
核心原因是macOS 32位Intel环境下,char默认是有符号类型(signed char)。当你用
(char *)强制转换内存地址时,lldb会把每个字节当作signed char读取:- 若字节值的最高位是1(比如0x83、0xc4这类大于0x7f的数),说明这是负数的补码表示。转换为32位整数时会触发符号扩展——高位全部补1,最终就变成了0xffffff83、0xffffffc4这样的形式。
- 若字节值最高位是0(比如0x10、0x0e),符号扩展后高位都是0,所以直接显示为\x10、\x0e。
如果你想按无符号字节查看内存,避免符号扩展,只需把类型改成
unsigned char*,执行命令:(lldb) expr ((unsigned char *) 0xa5baddf2)这样大于0x7f的字节就会显示为\x83、\xc4,不会带ffffff前缀。
另外,lldb显示字符串时遵循C字符串规则,遇到空字节(0x00)就会终止,这是正常行为。
内容的提问来源于stack exchange,提问作者John O
相关产品推荐
相关产品推荐

