pub_core_ume.h revision ec7be9c3b51e516092dde66a5ff11ea11b114535
12886b0ee5858900af3ab9392ee9d0884a549ce04jseward 21fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*--------------------------------------------------------------------*/ 308a2e173ad2067f19c0466dd6c774d36b4575262njn/*--- User-mode execve. pub_core_ume.h ---*/ 41fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*--------------------------------------------------------------------*/ 51fe545083582f11a77d928ffed6c0074bd6f381bnethercote 62886b0ee5858900af3ab9392ee9d0884a549ce04jseward/* 7b9c427c63a278cc612ae0ec573be7bb1abaa447fnjn This file is part of Valgrind, a dynamic binary instrumentation 8b9c427c63a278cc612ae0ec573be7bb1abaa447fnjn framework. 92886b0ee5858900af3ab9392ee9d0884a549ce04jseward 10e4b0bf07b0ee0a18eacc5aba91686ab5fc1d327bsewardj Copyright (C) 2000-2006 Julian Seward 112886b0ee5858900af3ab9392ee9d0884a549ce04jseward jseward@acm.org 122886b0ee5858900af3ab9392ee9d0884a549ce04jseward 132886b0ee5858900af3ab9392ee9d0884a549ce04jseward This program is free software; you can redistribute it and/or 142886b0ee5858900af3ab9392ee9d0884a549ce04jseward modify it under the terms of the GNU General Public License as 152886b0ee5858900af3ab9392ee9d0884a549ce04jseward published by the Free Software Foundation; either version 2 of the 162886b0ee5858900af3ab9392ee9d0884a549ce04jseward License, or (at your option) any later version. 172886b0ee5858900af3ab9392ee9d0884a549ce04jseward 182886b0ee5858900af3ab9392ee9d0884a549ce04jseward This program is distributed in the hope that it will be useful, but 192886b0ee5858900af3ab9392ee9d0884a549ce04jseward WITHOUT ANY WARRANTY; without even the implied warranty of 202886b0ee5858900af3ab9392ee9d0884a549ce04jseward MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 212886b0ee5858900af3ab9392ee9d0884a549ce04jseward General Public License for more details. 222886b0ee5858900af3ab9392ee9d0884a549ce04jseward 232886b0ee5858900af3ab9392ee9d0884a549ce04jseward You should have received a copy of the GNU General Public License 242886b0ee5858900af3ab9392ee9d0884a549ce04jseward along with this program; if not, write to the Free Software 252886b0ee5858900af3ab9392ee9d0884a549ce04jseward Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 262886b0ee5858900af3ab9392ee9d0884a549ce04jseward 02111-1307, USA. 272886b0ee5858900af3ab9392ee9d0884a549ce04jseward 282886b0ee5858900af3ab9392ee9d0884a549ce04jseward The GNU General Public License is contained in the file COPYING. 292886b0ee5858900af3ab9392ee9d0884a549ce04jseward*/ 302886b0ee5858900af3ab9392ee9d0884a549ce04jseward 3108a2e173ad2067f19c0466dd6c774d36b4575262njn#ifndef __PUB_CORE_UME_H 3208a2e173ad2067f19c0466dd6c774d36b4575262njn#define __PUB_CORE_UME_H 3308a2e173ad2067f19c0466dd6c774d36b4575262njn 3408a2e173ad2067f19c0466dd6c774d36b4575262njn//-------------------------------------------------------------------- 3508a2e173ad2067f19c0466dd6c774d36b4575262njn// PURPOSE: This module implements user-mode execve, ie. program loading 36ec7be9c3b51e516092dde66a5ff11ea11b114535sewardj// and exec'ing. 3708a2e173ad2067f19c0466dd6c774d36b4575262njn//-------------------------------------------------------------------- 387e343cd9bc720226fa395b1588621086f152dd5efitzhardinge 39107e1c0ebd1fa36ade35dff79dd40f0a67e3cb19nethercote/*------------------------------------------------------------*/ 40107e1c0ebd1fa36ade35dff79dd40f0a67e3cb19nethercote/*--- Loading ELF files ---*/ 41107e1c0ebd1fa36ade35dff79dd40f0a67e3cb19nethercote/*------------------------------------------------------------*/ 42107e1c0ebd1fa36ade35dff79dd40f0a67e3cb19nethercote 43ea147e739aff620b1336537f251f58f074ec16f2nethercote// Info needed to load and run a program. IN/INOUT/OUT refers to the 44ea147e739aff620b1336537f251f58f074ec16f2nethercote// inputs/outputs of do_exec(). 4513247ca4d05152e83527b63d7350fba76cb05728sewardjtypedef 4613247ca4d05152e83527b63d7350fba76cb05728sewardj struct { 4713247ca4d05152e83527b63d7350fba76cb05728sewardj HChar** argv; // IN: the original argv 4813247ca4d05152e83527b63d7350fba76cb05728sewardj 4913247ca4d05152e83527b63d7350fba76cb05728sewardj Addr exe_base; // INOUT: lowest (allowed) address of exe 5013247ca4d05152e83527b63d7350fba76cb05728sewardj Addr exe_end; // INOUT: highest (allowed) address 5113247ca4d05152e83527b63d7350fba76cb05728sewardj 5213247ca4d05152e83527b63d7350fba76cb05728sewardj Addr phdr; // OUT: address phdr was mapped at 5313247ca4d05152e83527b63d7350fba76cb05728sewardj Int phnum; // OUT: number of phdrs 5413247ca4d05152e83527b63d7350fba76cb05728sewardj Addr interp_base; // OUT: where interpreter (ld.so) was mapped 5513247ca4d05152e83527b63d7350fba76cb05728sewardj Addr entry; // OUT: entrypoint in main executable 5613247ca4d05152e83527b63d7350fba76cb05728sewardj Addr init_ip; // OUT: address of first instruction to execute 5713247ca4d05152e83527b63d7350fba76cb05728sewardj Addr brkbase; // OUT: base address of brk segment 5813247ca4d05152e83527b63d7350fba76cb05728sewardj Addr init_toc; // OUT: address of table-of-contents, on 5913247ca4d05152e83527b63d7350fba76cb05728sewardj // platforms for which that makes sense 6013247ca4d05152e83527b63d7350fba76cb05728sewardj // (ppc64-linux only) 6113247ca4d05152e83527b63d7350fba76cb05728sewardj 6213247ca4d05152e83527b63d7350fba76cb05728sewardj // These are the extra args added by #! scripts 6313247ca4d05152e83527b63d7350fba76cb05728sewardj HChar* interp_name; // OUT: the interpreter name 6413247ca4d05152e83527b63d7350fba76cb05728sewardj HChar* interp_args; // OUT: the args for the interpreter 6513247ca4d05152e83527b63d7350fba76cb05728sewardj } 6613247ca4d05152e83527b63d7350fba76cb05728sewardj ExeInfo; 677e343cd9bc720226fa395b1588621086f152dd5efitzhardinge 687375061f0ecd9534a27ade9bb4fbe47ddce41298njn// Do a number of appropriate checks to see if the file looks executable by 697375061f0ecd9534a27ade9bb4fbe47ddce41298njn// the kernel: ie. it's a file, it's readable and executable, and it's in 707375061f0ecd9534a27ade9bb4fbe47ddce41298njn// either ELF or "#!" format. On success, 'out_fd' gets the fd of the file 717375061f0ecd9534a27ade9bb4fbe47ddce41298njn// if it's non-NULL. Otherwise the fd is closed. 7213247ca4d05152e83527b63d7350fba76cb05728sewardjextern SysRes VG_(pre_exec_check)(const HChar* exe_name, Int* out_fd); 737375061f0ecd9534a27ade9bb4fbe47ddce41298njn 74ea147e739aff620b1336537f251f58f074ec16f2nethercote// Does everything short of actually running 'exe': finds the file, 75ea147e739aff620b1336537f251f58f074ec16f2nethercote// checks execute permissions, sets up interpreter if program is a script, 76ea147e739aff620b1336537f251f58f074ec16f2nethercote// reads headers, maps file into memory, and returns important info about 77ea147e739aff620b1336537f251f58f074ec16f2nethercote// the program. 7813247ca4d05152e83527b63d7350fba76cb05728sewardjextern Int VG_(do_exec)(const HChar* exe, ExeInfo* info); 797e343cd9bc720226fa395b1588621086f152dd5efitzhardinge 801fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*------------------------------------------------------------*/ 811fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*--- Finding and dealing with auxv ---*/ 821fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*------------------------------------------------------------*/ 837e343cd9bc720226fa395b1588621086f152dd5efitzhardinge 847e343cd9bc720226fa395b1588621086f152dd5efitzhardingestruct ume_auxv 857e343cd9bc720226fa395b1588621086f152dd5efitzhardinge{ 86b9bca7c47ad233225a13362bbd15f5c2bf8c1f1csewardj Word a_type; 877e343cd9bc720226fa395b1588621086f152dd5efitzhardinge union { 887e343cd9bc720226fa395b1588621086f152dd5efitzhardinge void *a_ptr; 89b9bca7c47ad233225a13362bbd15f5c2bf8c1f1csewardj Word a_val; 905ed88f2c948cfd878b4c627fa468908666a668e5mueller } u; 917e343cd9bc720226fa395b1588621086f152dd5efitzhardinge}; 927e343cd9bc720226fa395b1588621086f152dd5efitzhardinge 9362ff0f2f39592092459bdc90a9a3b820d380152bnjnextern struct ume_auxv *VG_(find_auxv)(UWord* orig_esp); 947e343cd9bc720226fa395b1588621086f152dd5efitzhardinge 9508a2e173ad2067f19c0466dd6c774d36b4575262njn#endif /* __PUB_CORE_UME_H */ 961fe545083582f11a77d928ffed6c0074bd6f381bnethercote 971fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*--------------------------------------------------------------------*/ 9808a2e173ad2067f19c0466dd6c774d36b4575262njn/*--- end ---*/ 991fe545083582f11a77d928ffed6c0074bd6f381bnethercote/*--------------------------------------------------------------------*/ 100