这个语法 *((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 中,计算表达式时,总是从内部到外部。
这是代码:
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 中,计算表达式时,总是从内部到外部。