Changeset 3322
- Timestamp:
- Nov 10, 2008, 11:51:29 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
neercs/trunk/src/mytrace.c
r3320 r3322 335 335 ssize_t envsize = 16*1024; 336 336 int ret, fd, l, l2; 337 char *n ewargv[] = { NULL };337 char *nullp = NULL; 338 338 ssize_t r; 339 339 … … 373 373 } 374 374 envsize = r; 375 l2 = sizeof(char *); /* Size of a pointer */ 376 p2 = regs.RSP; 377 378 /* First argument is the command string */ 375 379 l = strlen(command)+1; 376 l2 = sizeof(char *);377 p2 = regs.RSP;378 380 memcpy_into_target(t, p2, command, l); 379 381 p2 += l; 382 383 /* Second argument is argv */ 380 384 argvaddr = p2; 385 /* argv[0] is a pointer to the command string */ 381 386 memcpy_into_target(t, p2, (char *)®s.RSP, l2); 382 387 p2 += l2; 383 memcpy_into_target(t, p2, (char *)&newargv, l2); 388 /* Then follows a NULL pointer */ 389 memcpy_into_target(t, p2, (char *)&nullp, l2); 384 390 p2 += l2; 391 392 /* Third argument is the environment */ 393 /* First, copy all the strings */ 385 394 memcpy_into_target(t, p2, env, envsize); 386 395 envaddr = p2; 387 396 p2 += envsize; 397 /* Then write an array of pointers to the strings */ 388 398 envptraddr = p2; 389 399 p = env; … … 395 405 p += strlen(p)+1; 396 406 } 397 memcpy_into_target(t, p2, (char *)&newargv, l2); 407 /* And have a NULL pointer at the end of the array */ 408 memcpy_into_target(t, p2, (char *)&nullp, l2); 398 409 free(env); 410 399 411 ret = remote_syscall(t, MYCALL_EXECVE, regs.RSP, argvaddr, envptraddr); 400 412
Note: See TracChangeset
for help on using the changeset viewer.