在 Linux 终端中执行已编译的 C 文件:理解语法(缓冲区溢出应用程序)

Executing compiled C file in Linux terminal : understanding syntax (buffer overflow application)

我正在尝试学习缓冲区溢出功能,我发现:

ouah@weed:~$ ./vuln1 `perl -e 'print "A"x300'`

其中vuln1是编译后的C文件vuln1.c :

#include <stdio.h>

main (int argc, char *argv[])
{ 
   char buffer[256];
   if (argc > 1)
      strcpy(buffer,argv[1]);
}

所以我会知道那些奇怪的 ``perl -e 'print "A"x300'` 的含义:“perl -e”和“print”在这里应该是什么意思(我知道有应该是 main() 参数),对于看起来像乘法但更少“*”的“A”x300(因为此命令的目标是溢出缓冲区)和同时十六进制写入...

Perl 是 a scripting languageperl-e 开关直接将下一个参数计算为代码(而不是 运行 脚本文件)。

print 是一个 Perl built-in function that outputs its arguments.

x就是repetition operator in Perl"A" x 3 产生 "AAA".

最后一块拼图是 bash 中的反引号 (` `) 将执行它们的内容作为命令并产生打印到标准输出的任何命令。

因此,这是生成 300 个 A 作为 ./vuln1 的参数的一种快速简便的方法,当读取参数时会溢出 256 字节的缓冲区。

./vuln1 替换为普通的 echo 以查看最终通过的参数。