【发布时间】:2017-11-13 17:24:51
【问题描述】:
我编写了一个容易受到缓冲区溢出影响的小 C 程序。一切都按预期工作,尽管我现在遇到了一个小问题:
我想调用一个位于地址 0x00007ffff7a79450 上的函数,因为我正在通过 bash 终端传递缓冲区溢出的参数(如下所示:
./a "$(python -c 'print "aaaaaaaaaaaaaaaaaaaaaa\x50\x94\xA7\xF7\xFF\x7F\x00\x00"')" )
我收到 bash 忽略空字节的错误。
/bin/bash: warning: command substitution: ignored null byte in input
结果我在内存中得到了错误的地址(0x7ffff7a79450而不是0x00007ffff7a79450)。
现在我的问题是:如何生成前导 0 并将它们作为参数提供给我的程序?
【问题讨论】:
-
与另一个程序...
-
NULL是一个带有 空指针常量 的宏。切勿将其用于char。而且您的代码没有问题。你故意调用未定义的行为,这正是你得到的。案件结案。 -
参见this answer 和this one 。 bash 将空字节作为空格处理。
-
您正试图在错误的地方解决问题。修复易受缓冲区溢出影响的小 C 程序。
-
@ArturR.Czechowski:出于培训/演示目的,他的目的是让他的程序容易受到缓冲区溢出的影响。他只是想解析一个包含空字节的函数的地址。