【发布时间】:2021-05-12 22:25:08
【问题描述】:
这是代码:
char *command, *buffer;
command = (char *) malloc(200);
bzero(command, 200);
strcpy(command, "./notesearch \'");
buffer = command + strlen(command);
for(int i=0; i < 160; i+=4) {
*((unsigned int *)(buffer+i)) = ret; // What does this syntax mean?
}
您可以在此处获取完整代码 => https://raw.githubusercontent.com/intere/hacking/master/booksrc/exploit_notesearch.c
请帮助我,我是初学者。
【问题讨论】:
-
什么是缓冲区?
-
buffer的类型是什么? -
这需要太多的猜测。请提供更多上下文,可能是minimal reproducible example。
-
该代码假定
sizeof(unsigned int)是4。 C 不保证这一点,而且并非总是如此。 (在 Windows 中并非如此。) -
该代码假定缓冲区的地址与
unsigned int适当对齐。我想知道是否真的是这样。即使不是,它仍然可以在 x86 和 x64 上运行,尽管速度较慢。它会在其他机器上彻底失败。
标签: c buffer low-level-code