peal.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:4k
源码类别:

Windows CE

开发平台:

C/C++

  1. /**********
  2.  * Copyright (c) 2004 Greg Parker.  All rights reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  * 1. Redistributions of source code must retain the above copyright
  8.  *    notice, this list of conditions and the following disclaimer.
  9.  * 2. Redistributions in binary form must reproduce the above copyright
  10.  *    notice, this list of conditions and the following disclaimer in the
  11.  *    documentation and/or other materials provided with the distribution.
  12.  *
  13.  * THIS SOFTWARE IS PROVIDED BY GREG PARKER ``AS IS'' AND ANY EXPRESS OR
  14.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  15.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  16.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  17.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  18.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  19.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  20.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  21.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  22.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23.  **********/
  24. #ifndef PEAL_H
  25. #define PEAL_H
  26. #include <stdint.h>
  27. /*
  28.   PealModule *PealLoad(void *mem)
  29.     Loads ARM code and data from mem.
  30.     If mem points into a relocatable block, that block must be locked before 
  31.       calling PealLoad() and must remain locked until after PealUnload().
  32.     Note that PealLoad() may modify *mem. If mem points into a resource 
  33.       or feature memory block, then mem must point to the beginning of 
  34.       the block and the memory must be writeable with DmWrite().
  35.     Returns NULL if the load fails for any reason.
  36.     Warning: if you do not call PealUnload() before your program exits, 
  37.       your program may crash with a handle lock overflow error when run 
  38.       more than 16 times.
  39.   PealModule *PealLoadFromResources(DmTypeID type, DmResID baseID)
  40.     Loads ARM code and data from resources of the given type, starting 
  41.       with the given resource ID.
  42.     The resources should be numbered sequentially starting with baseID, 
  43.       one for the ELF header and section list plus one for each ELF section. 
  44.       This is the output format generated by `peal-postlink -s ...`.
  45.     DmGetResource() is used to load the resources. Some sections with 
  46.       no contents may have no resource, but still occupy a slot in the 
  47.       resource ID sequence. Some of the resources are kept open and 
  48.       locked until PealUnload() is called.
  49.     Note that some of the resources may be modified using DmWrite().
  50.     Returns NULL if the load fails for any reason.
  51.     Warning: if you do not call PealUnload() before your program exits, 
  52.       your program may crash with a handle lock overflow error when run 
  53.       more than 16 times.
  54.   void PealUnload(PealModule *m)
  55.     Unloads ARM code and data previously loaded by PealLoad().
  56.     The module must not be used after this call.
  57.     Warning: if you do not call PealUnload() before your program exits, 
  58.       your program may crash with a handle lock overflow error when run 
  59.       more than 16 times.
  60.     
  61.   void *PealLookupSymbol(PealModule *m, char *query)
  62.     Returns the address of a named ARM function or variable in module m.
  63.     Returns NULL if the module contains no such function or variable.
  64.     A function can be called by passing this address to PealCall().
  65.     A variable can be read or written by dereferencing this address.
  66.   uint32_t PealCall(PealModule *m, void *addr, void *arg)
  67.     Calls the function at addr in ARM module m, passing it the given arg.
  68.     Returns the value returned by that function.
  69.     The ARM function PealArmStub() is used to prepare ARM global state.
  70.     The called function should take zero or one arguments.
  71.  */
  72. typedef struct PealModule PealModule;
  73. PealModule *PealLoad(void *elf);
  74. PealModule *PealLoadFromResources(DmResType type, DmResID baseID, const PealModule* common, UInt32 prgId, UInt16 ftrId, Boolean mem, Boolean onlyftr, Boolean memsema);
  75. void PealUnload(PealModule *m);
  76. void *PealLookupSymbol(const PealModule *m, char *query);
  77. uint32_t PealCall(PealModule *m, void *addr, void *arg);
  78. #endif