GDB会话中如何访问特定内存地址?movabs常量地址访问失败
GDB中无法访问movabs指令十六进制常量对应地址的解决方法
你混淆了movabs指令里数值的含义:这些像0x206f746e656d654d的十六进制值不是内存地址,而是要写入栈上buf的立即数数据。movabs的作用是直接把8字节常量复制到栈上的buf位置,而非读取这个数值指向的内存。
正确的访问步骤:
- 从反汇编代码里找到
buf在栈上的偏移位置,比如指令movabs $0x206f746e656d654d, -0x40(%rbp)中,buf的起始地址就是%rbp-0x40。 - 在GDB中用
p $rbp-0x40计算出buf的具体内存地址。 - 用
x/s或x/x访问这个buf地址,比如执行x/s $rbp-0x40,就能看到存入的字符串内容——这些十六进制值是字符串的ASCII逆序(小端存储),比如0x206f746e656d654d反转字节后是4d 65 6d 65 6e 74 6f 20,对应字符串"Memento "。
内容的提问来源于stack exchange,提问作者KmerPadreDiPdor
相关产品推荐
相关产品推荐

