116 lines
4.1 KiB
C
116 lines
4.1 KiB
C
/*
|
|
* Copyright (C) 2006-2012 Apple Computer, Inc. All rights reserved.
|
|
*
|
|
* This document is the property of Apple Computer, Inc.
|
|
* It is considered confidential and proprietary.
|
|
*
|
|
* This document may not be reproduced or transmitted in any form,
|
|
* in whole or in part, without the express written permission of
|
|
* Apple Computer, Inc.
|
|
*/
|
|
#ifndef __LIB_MACHO_H
|
|
#define __LIB_MACHO_H
|
|
|
|
#include <lib/image.h>
|
|
#include <sys/types.h>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
/**
|
|
* load a kernelcache from memory, return the entry point
|
|
*
|
|
* \param[in] addr Address of the kernelcache in memory.
|
|
* \param[in] size Size of the kernelcache in memory.
|
|
* \param[in] type Type of kernelcache (restore or local boot).
|
|
* \param[out] entry Entrypoint recovered from the kernelcache.
|
|
* \param[out] boot_args_out Boot arguments to pass to the kernelcache entry point.
|
|
*
|
|
* \return 0 Kernelcache was loaded successfully.
|
|
* \return -2 Kernelcache is too large.
|
|
* \return -3 Kernelcache container failed validation (signature,
|
|
* wrong system, etc.)
|
|
* \return -4 Not a valid kernelcache (bad magic number).
|
|
* \return -5 Decompression failed.
|
|
* \return -6 Not a valid Mach-o image (bad magic number).
|
|
* \return -7 Mach-o load failed.
|
|
*/
|
|
int load_kernelcache(addr_t addr, size_t size, uint32_t type, addr_t *entry, addr_t *boot_args_out);
|
|
|
|
/**
|
|
* load a kernelcache from a path, return the entry point
|
|
*
|
|
* \param[in] path Filesystem path from which to read the kernelcache.
|
|
* \param[in] type Type of kernelcache (restore or local boot).
|
|
* \param[out] entry Entrypoint recovered from the kernelcache.
|
|
* \param[out] boot_args_out Boot arguments to pass to the kernelcache entry point.
|
|
*
|
|
* \return 0 Kernelcache was loaded successfully.
|
|
* \return -2 Kernelcache is too large.
|
|
* \return -3 Kernelcache container failed validation (signature,
|
|
* wrong system, etc.)
|
|
* \return -4 Not a valid kernelcache (bad magic number).
|
|
* \return -5 Decompression failed.
|
|
* \return -6 Not a valid Mach-o image (bad magic number).
|
|
* \return -7 Mach-o load failed.
|
|
*/
|
|
int load_kernelcache_file(const char *path, uint32_t type, addr_t *entry, addr_t *boot_args_out);
|
|
|
|
/**
|
|
* load a kernelcache from a known image, return the entry point
|
|
*
|
|
* \param[in] image Known image from which to read the kernelcache.
|
|
* \param[in] type Type of kernelcache (restore or local boot).
|
|
* \param[out] entry Entrypoint recovered from the kernelcache.
|
|
* \param[out] boot_args_out Boot arguments to pass to the kernelcache entry point.
|
|
*
|
|
* \return 0 Kernelcache was loaded successfully.
|
|
* \return -2 Kernelcache is too large.
|
|
* \return -3 Kernelcache container failed validation (signature,
|
|
* wrong system, etc.)
|
|
* \return -4 Not a valid kernelcache (bad magic number).
|
|
* \return -5 Decompression failed.
|
|
* \return -6 Not a valid Mach-o image (bad magic number).
|
|
* \return -7 Mach-o load failed.
|
|
*/
|
|
int load_kernelcache_image(struct image_info *image, uint32_t type, addr_t *entry, addr_t *boot_args_out);
|
|
|
|
/**
|
|
* load a monitor from a path
|
|
*
|
|
* A loaded monitor is recognised by the kernelcache loader; the
|
|
* appropriate entrypoint will be returned at kernelcache load time.
|
|
*
|
|
* \param[in] path Filesystem path from which to read the kernelcache.
|
|
*
|
|
* \return 0 Monitor was loaded successfully.
|
|
* \return -2 Monitor is too large.
|
|
* \return -3 Monitor container failed validation (signature,
|
|
* wrong system, etc.)
|
|
* \return -6 Not a valid Mach-o image (bad magic number).
|
|
* \return -7 Mach-o load failed.
|
|
*/
|
|
int load_monitor_file(const char *path);
|
|
|
|
/**
|
|
* load a monitor from a known image
|
|
*
|
|
* \param[in] address Known image address
|
|
* \param[in] size Known image size
|
|
*
|
|
* \return 0 Monitor was loaded successfully.
|
|
* \return -2 Monitor is too large.
|
|
* \return -3 Monitor container failed validation (signature,
|
|
* wrong system, etc.)
|
|
* \return -6 Not a valid Mach-o image (bad magic number).
|
|
* \return -7 Mach-o load failed.
|
|
*/
|
|
int load_monitor_image(addr_t address, size_t size);
|
|
|
|
bool macho_valid(addr_t addr);
|
|
bool macho_load(addr_t imageAddr, size_t imageSize, addr_t loadAddr, addr_t *virtualBase, addr_t *virtualEnd, addr_t *entryPoint, size_t slide);
|
|
|
|
__END_DECLS
|
|
|
|
#endif
|
|
|