【发布时间】:2019-01-24 07:53:55
【问题描述】:
char buf[sizeof(shellcode)];
strcpy(buf, shellcode);
((void(*)())buf)();
我很难理解第三行的语法,我认为它正在使缓冲区成为函数?
【问题讨论】:
-
第三行将缓冲区转换为看起来无效的函数。
-
局部变量(包括数组)通常由编译器入栈。很少有操作系统会使堆栈可执行,因此无论如何您都不能“调用”它。
-
@Daniel。它可能只是复制一个指针,但
strcpy看起来根本不是正确的选择。 -
strcpy将在第一个零处停止。考虑memcpy -
如果
shellcode包含零,它将在结束之前停止,它用于复制以nul 结尾的字符串,而不是缓冲区。如果它不包含零,它将溢出。使用memcpy