You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在终端打印NOP('\x90'):粘贴至GDB后栈值异常问题咨询

复制粘贴二进制NOP字符(\x90)到GDB输入异常的原因

问题核心是终端与调试器的文本/二进制处理逻辑不匹配,具体原因如下:

  1. 终端对不可打印二进制字符的转译
    你的C程序输出的\x90(十六进制0x90)属于ASCII不可打印控制字符,终端无法直接渲染为可读文本,会用占位符(如方框、空白标记)替代。复制操作时,你复制的是终端占位符的文本编码,而非原始的0x90二进制字节。

  2. GDB输入的文本解析机制
    将占位符粘贴到GDB后,GDB会把输入内容按ASCII/Unicode编码解析成字节,而非直接识别为原始二进制。你看到的0x00bdbfef是终端占位符的Unicode编码对应的字节值,和预期的0x90完全无关。

  3. Python中的同类问题
    Python终端输入(如input()函数)同样基于文本流处理,粘贴内容会被当作文本解析,而非原始二进制字节,因此也无法得到0x90的结果。

解决办法

避免通过终端复制粘贴传递二进制数据,直接用管道或GDB命令注入原始字节:

  • 启动GDB目标程序时用管道传入二进制数据:gdb --args ./target_program < <(echo -n -e '\x90')
  • 在GDB内部直接构造二进制数据写入目标位置:
    # 若目标程序从stdin读取,调用fwrite写入原始字节
    call fwrite("\x90", 1, 1, stdin)
    # 或直接修改栈内存(替换为你的目标栈地址)
    set {char}0x7fffffffe000 = 0x90
    

内容的提问来源于stack exchange,提问作者professional pro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:25:16