我正在开发一个简单的弧形注入漏洞,其中此特定字符串给出了我想要跳转的地址:
当我将此字符串
感谢您的帮助!
Á^F@^@
。这是地址0x004006c1
(我使用64位英特尔处理器,因此为x86-64并具有小端排列)。当我将此字符串
Á^F@^@
用作我的函数中易受攻击的gets()
例程的输入,并使用gdb
检查地址时,地址会被修改为0x00400681
而不是0x004006c1
。 我不太确定为什么会发生这种情况。此外,是否有任何方法可以轻松地向stdin
提供十六进制值以供gets
例程使用? 我曾尝试过类似以下内容:121351...12312\xc1\x06\x40\x00
,但它会将单个字符转换为十六进制,因此我得到了一些类似于5c78..
(\和x的十六进制,后跟C和1的十六进制)的东西。感谢您的帮助!
\xC3\x81
,但由于某种原因,\xC3
字节被丢弃或交换了(?), 或者转换为 GB 18030 作为\x81\x30\x86\x39
,在这种情况下,如果您打印更多内容,您将会看到更多信息。这只是一个快速的 Python 编码测试,但 UTF-8 和 GB 18030 是唯一包含\x81
字节序列的编码方式。个人建议只需将stdin
重定向到文件,以避免出现此类字符输入的编码问题。 - user539810