使用SASM调试x86-64汇编时$rsi与string2显示差异问题
问题原因分析
这是SASM调试器对符号(label)和寄存器的处理逻辑差异导致的:
string2是汇编器定义的符号,本质是.data段中"hello"字符串的起始地址。SASM调试器默认会直接显示该符号指向的内存内容(也就是"hello"字符数组);但当你勾选「address」选项时,调试器会把你输入的内容当作内存地址数值来解析——它没有把string2这个符号转换成对应的地址数值,反而直接把符号名本身当作地址(显然这不是合法的内存地址),所以会报错Wrong variable or address: "string2"。$rsi是寄存器,调试器能正确读取寄存器里存储的数值(也就是string2对应的地址)。当勾选「address」选项时,调试器会用寄存器里的这个数值作为内存地址,去访问对应的内存区域,自然就能正确显示"hello"字符数组。
如果想通过符号string2勾选「address」也能正常显示,可以试试在监视框里输入&string2(部分调试器支持这种取符号地址的语法),或者直接输入string2对应的具体地址数值(调试时看$rsi的值即可得到),这样就能正常解析了。
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

