这个语法 *((unsigned int *)(buffer+i)) 在 C 中是什么意思

What does this syntax *((unsigned int *)(buffer+i)) mean in C

这是代码:

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

请帮助我,我是初学者。

这会将 unsigned int ret 写入地址 buffer+i

*((unsigned int *)(buffer+i)) = ret
  • buffer+i 是一个 char*(指向 char 的指针)
  • (unsigned int *)(buffer+i) 中的 (unsigned int *) 将指向 char 的指针转换为指向 unsigned int 的指针。这称为 cast.
  • 最后 * 将此指针取消引用到 unsigned int 并将 ret 写入该地址。

请注意,根据您的硬件架构,这可能会因为对齐问题而失败。

从里​​往外读。这里我们必须假设 buffer 是指向某个内存区域或数组元素的指针。 你有:

  • buffer + 1 ==> 下一个内存位置或下一个数组元素的地址
  • (unsigned int *)(buffer+i) ==> 将结果指针转换为 unsigned int.
  • 类型的指针
  • *((unsigned int *)(buffer+i)) ==> 取消引用 unsigned int 指出(获取值)。
  • *((unsigned int *)(buffer+i)) = ret; ==> 赋值给变量ret.

在 C 中,计算表达式时,总是从内部到外部。