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

为何栈中混入0xc2指令而非预期的0x90?缓冲区溢出调试疑问

问题分析与解决

原因:Python字符串编码转换问题

这不是保护机制导致的,核心问题出在Python的输出编码处理上。你用print("\x90")时,Python会把这个字节当作UTF-8字符处理,但0x90不属于UTF-8单字节有效范围(0x00-0x7F),系统会自动把它转换成UTF-8的替代序列0xc2 0x90,这就造成了栈里0xc2和0x90交错的现象。

解决方法

要输出原始字节而非编码后的字符串,有两种简单方式:

方法1:用Python的字节流输出

修改命令,直接写入原始字节到标准输出,跳过编码转换:

./vuln $(python -c 'import sys; sys.stdout.buffer.write(b"\x41"*(272-96-74-4) + b"\x90"*96 + b"\x44"*74 + b"\x42"*4)')

这里用b""定义纯字节串,通过sys.stdout.buffer.write直接输出原始字节,不会触发编码转换。

方法2:使用Python 2(若环境支持)

Python 2的print默认输出字节,不会做UTF-8编码处理,直接执行即可:

./vuln $(python2 -c 'print "\x41"*(272-96-74-4) + "\x90"*96 + "\x44"*74 + "\x42"*4')

验证

执行修改后的命令后,再用GDB查看栈内存,就能看到连续的0x90填充,不会再出现0xc2干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:47:43