【发布时间】:2019-01-24 18:25:12
【问题描述】:
#include <unistd.h>
char shellcode[] = "???";
int main(int argc, char* argv[]) {
int* ret;
ret = (int*) &ret + 2;
(*ret) = (int) shellcode;
}
启动此程序后,我必须更改 shellCode 变量以打印今年。
我以ret 指向其先前地址+ 2 的方式理解此代码,并且它具有shellCode 数组开始的地址的值。
但是在这种情况下堆栈看起来如何?我只是不明白main() 中代码的含义以及缓冲区溢出如何在这里工作。
编辑
好吧,我的问题并不像我想象的那么明显。我只能更改shellcode 中的内容,我不能向此代码添加任何内容(更改shellcode 除外)并且输出应为2019(将其视为输出所有其他数字,即2000,数字将被硬编码)
【问题讨论】:
-
需要指出的是,
ret指向它自己的地址加 2(而不是基于它之前指向的地址)。 -
我不明白您对
main()中的三行代码的目标是什么,但是获取当前年份的字符串版本,然后将其打印到stdout非常简单,并且可以通过使用 strftime 函数来完成。
标签: c buffer-overflow shellcode