example3.c:
------------------------------------------------------------------------------
void function(char *str)
{
char buffer[256];

strcpy(buffer,str);
printf("hello, %s\n",buffer);
return;
}

void main(int argc, char *argvp[])
{
if (argc != 2)
{
printf("Usage: %s yourname\n", argv[0]);
return;
}
function(argv[1]);
printf("OK!\n");
return;
}
------------------------------------------------------------------------------

我们想把要执行的代码放到我们想使其溢出的缓冲区里,并且覆盖函数的返回地址,使其指向这个缓冲区,如此一来,我们构造的参数应该是这样的:

NOP NOP ... NOP Shellcode ADDR ADDR