Changeset 2501
- Timestamp:
- 07/01/08 01:26:12 (5 years ago)
- File:
-
- 1 edited
-
neercs/trunk/src/grab.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
neercs/trunk/src/grab.c
r2498 r2501 39 39 #include "neercs.h" 40 40 41 #if defined __x86_64__ 42 # define RAX rax 43 # define RBX rbx 44 # define RCX rcx 45 # define RDX rdx 46 # define RSP rsp 47 # define RIP rip 48 #else 49 # define RAX eax 50 # define RBX ebx 51 # define RCX ecx 52 # define RDX edx 53 # define RSP esp 54 # define RIP eip 55 #endif 56 41 57 #if defined USE_GRAB 42 58 static int memcpy_from_target(pid_t pid, void* dest, void* src, size_t n) … … 83 99 } 84 100 85 regs-> esp = oregs.esp-4;86 87 oinst = ptrace(PTRACE_PEEKTEXT, pid, regs-> esp, 0);101 regs->RSP = oregs.RSP - 4; 102 103 oinst = ptrace(PTRACE_PEEKTEXT, pid, regs->RSP, 0); 88 104 if (errno) { 89 105 fprintf(stderr, "PTRACE_PEEKTEXT failed\n"); … … 91 107 } 92 108 93 if (ptrace(PTRACE_POKETEXT, pid, regs-> esp, 0x80cd) < 0) { /* int 0x80 */109 if (ptrace(PTRACE_POKETEXT, pid, regs->RSP, 0x80cd) < 0) { /* int 0x80 */ 94 110 fprintf(stderr, "PTRACE_POKETEXT failed\n"); 95 111 return errno; 96 112 } 97 113 98 regs-> eip = regs->esp;114 regs->RIP = regs->RSP; 99 115 if(ptrace(PTRACE_SETREGS, pid, NULL, regs) < 0) 100 116 { … … 119 135 } 120 136 121 if(ptrace(PTRACE_POKETEXT, pid, oregs. esp-4 , oinst) < 0)137 if(ptrace(PTRACE_POKETEXT, pid, oregs.RSP-4 , oinst) < 0) 122 138 { 123 139 fprintf(stderr, "PTRACE_POKETEXT failed\n"); … … 137 153 } 138 154 139 regs. eax= SYS_close;140 regs. ebx= fd;155 regs.RAX = SYS_close; 156 regs.RBX = fd; 141 157 142 158 return do_syscall(pid, ®s); … … 152 168 } 153 169 154 regs. eax= SYS_dup2;155 regs. ebx= oldfd;156 regs. ecx= newfd;170 regs.RAX = SYS_dup2; 171 regs.RBX = oldfd; 172 regs.RCX = newfd; 157 173 158 174 return do_syscall(pid, ®s); … … 181 197 memcpy_into_target(pid, target_page, path, strlen(path)+4); 182 198 183 regs. eax= SYS_open;184 regs. ebx= (long)target_page;185 regs. ecx= O_RDWR;186 regs. edx= 0755;199 regs.RAX = SYS_open; 200 regs.RBX = (long)target_page; 201 regs.RCX = O_RDWR; 202 regs.RDX = 0755; 187 203 188 204 if((ret = do_syscall(pid, ®s)) != 0) … … 194 210 memcpy_into_target(pid, target_page, backup_page, size); 195 211 196 *fd = regs. eax;212 *fd = regs.RAX; 197 213 198 214 return 0; … … 211 227 debug("Running setsid on process %d (sid=%d)", pid, getsid(pid)); 212 228 213 regs. eax= SYS_setpgid;214 regs. ebx= 0;215 regs. ecx= getsid(pid);229 regs.RAX = SYS_setpgid; 230 regs.RBX = 0; 231 regs.RCX = getsid(pid); 216 232 217 233 if((ret = do_syscall(pid, ®s)) != 0) … … 220 236 } 221 237 222 if (regs. eax!= 0) {238 if (regs.RAX != 0) { 223 239 fprintf(stderr, "setpgid failed\n"); 224 return -regs. eax;225 } 226 227 regs. eax= SYS_setsid;240 return -regs.RAX; 241 } 242 243 regs.RAX = SYS_setsid; 228 244 229 245 if((ret = do_syscall(pid, ®s)) != 0) … … 234 250 debug("pid %d has now sid %d", pid, getsid(pid)); 235 251 236 if (regs. eax== -1) {252 if (regs.RAX == -1) { 237 253 fprintf(stderr, "getsid failed\n"); 238 return -regs. eax;254 return -regs.RAX; 239 255 } 240 256
Note: See TracChangeset
for help on using the changeset viewer.
