ローダー
API
ローダー関連のAPIを使用するには、solid_loader.h をインクルードしてください。
#include "solid_loader.h"
ローダーはロード元として SOLIDのファイルシステム を使用します。
SOLID_LDR_GetAddr
- 
int SOLID_LDR_GetAddr(const char *pName, SOLID_ADDRESS *pAddr)
- エクスポートされたシンボルのアドレスを取得します - 同じシンボル名で複数のアドレス値が登録された場合、 最後に登録されたアドレス値が取得できます。 - パラメータ:
- pName -- シンボル名(文字列, NULL終端) 
- pAddr -- 取得したアドレス 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_GetDllAddr
- 
int SOLID_LDR_GetDllAddr(const char *pDllName, const char *pSymbolName, SOLID_ADDRESS *pAddr)
- ロードオブジェクトを指定してエクスポートされたシンボルのアドレスを取得します - パラメータ:
- pDllName -- 検索を行うロードオブジェクト名(文字列, NULL終端) 
- pSymbolName -- シンボル名(文字列, NULL終端) 
- pAddr -- 取得したアドレス 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_FILEINFO
- 
typedef struct _SOLID_LDR_FILEINFO_ SOLID_LDR_FILEINFO
- 
struct _SOLID_LDR_FILEINFO_
- 説明 - ローダブルアプリのアドレスとセクションサイズ情報 - 定義 - typedef struct _SOLID_LDR_FILEINFO_ { SOLID_ADDRESS startAddress; size_t totalSize; size_t codeSize; size_t rodataSize; size_t dataSize; size_t bssSize; } SOLID_LDR_FILEINFO; - メンバー - 
SOLID_ADDRESS startAddress
- 先頭アドレス 
 - 
size_t totalSize
- 全体サイズ(byte) : 各セクション間のギャップも含む 
 - 
size_t codeSize
- 実行コードサイズ(byte) 
 - 
size_t rodataSize
- ReadOnlyデータサイズ(byte) 
 - 
size_t dataSize
- 初期値付きデータサイズ(byte) 
 - 
size_t bssSize
- ゼロクリア領域サイズ(byte) 
 
- 
SOLID_ADDRESS startAddress
SOLID_LDR_CheckContent
- 
int SOLID_LDR_CheckContent(const char *pFilename, SOLID_LDR_FILEINFO *pInfo)
- メモリーにロードする前に、ローダブルアプリのロードアドレスやサイズ情報を取得します - パラメータ:
- pFilename -- ファイル名 
- pInfo -- 情報を取得するバッファ 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_LoadFile
- 
int SOLID_LDR_LoadFile(const char *pName, const char *pFilename)
- ファイルシステムからロード処理を行います - パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
- pFilename -- ロードするファイル名(文字列, NULL終端) 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_LoadDLL
- 
int SOLID_LDR_LoadDLL(const char *pName, const char *pFilename, SOLID_ADDRESS loadAddr)
- ファイルシステムからDLLのロード処理を行います - 再配置可能なロードオブジェクトを指定アドレスにロードします。 ロード位置を指定しない時は、 - SOLID_LDR_ADDR_DLLAREAを指定してください。 この時、DLLのロード領域として使用可能な領域を DLLAREA としてメモリマップエディタで登録しておく必要があります。- パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
- pFilename -- ロードするファイル名(文字列, NULL終端) 
- loadAddr -- ロードする先頭アドレス 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_Load
- 
int SOLID_LDR_Load(const char *pName, const char *pFilename, SOLID_ADDRESS offset, size_t limit)
- ファイルシステムからロードオブジェクトをロードします - ロードオブジェクトをoffset分ずらした位置にロードします。 offsetをDLLロード領域から自動で処理する時は、 - SOLID_LDR_ADDR_DLLAREAを指定してください。 この時、DLLのロード領域として使用可能な領域を DLLAREA としてメモリマップエディタで登録しておく必要があります。 offsetを0にすると、再配置をせずにロードオブジェクト内に設定されているアドレスにロードします。 limitを0以外に設定すると、それ以上のメモリ領域を使用するオブジェクトはロードに失敗します。- パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
- pFilename -- ロードするファイル名(文字列, NULL終端) 
- offset -- ロードする位置のオフセット 
- limit -- ロードするサイズの制限 (byte, 0:無制限) 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_CanExec
- 
int SOLID_LDR_CanExec(const char *pName, SOLID_ADDRESS *pAddr)
- 指定されたロードオブジェクトが実行可能かを確認します - パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
- pAddr -- 実行開始アドレス 
 
- 戻り値:
- 1: 実行可能 
- 0: 実行不可(シンボル解決が終了していない) 
- それ以外: エラー 
 
 
SOLID_LDR_ForceExecutable
- 
int SOLID_LDR_ForceExecutable(const char *pName)
- 指定されたロードオブジェクトを強制的に実行可能にします - ロードオブジェクト内の未解決シンボルはそのままの状態でロードオブジェクトのコード領域を実行可能状態にします。 未解決シンボルを使用した実行部分の動作は不定(保証外)となり、またこの関数の実行後に未解決シンボルが解決されても コードには反映されません。 - パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_GetObjectArea
- 
int SOLID_LDR_GetObjectArea(const char *pName, SOLID_ADDRESS *pStartAddr, SOLID_ADDRESS *pEndAddr)
- 指定されたロードオブジェクトのロードされたメモリ領域を取得します。 - パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
- pStartAddr -- ロードした領域の先頭アドレス 
- pEndAddr -- ロードした領域の終了アドレス+1 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_UnLoad
- 
int SOLID_LDR_UnLoad(const char *pName)
- 指定されたロードオブジェクトをアンロードします - パラメータ:
- pName -- ロードオブジェクト名(文字列, NULL終端) 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_RegisterSymbol
- 
int SOLID_LDR_RegisterSymbol(const char *pName, SOLID_ADDRESS addr)
- シンボル情報を登録します - パラメータ:
- pName -- シンボル名(文字列, NULL終端) 
- addr -- アドレス 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_LDR_CheckUnresolved
- 
int SOLID_LDR_CheckUnresolved(void)
- 未解決シンボルの数を確認します - 戻り値:
- 未解決シンボルの総数 
 
SOLID_LDR_MGR_INFO
- 
typedef struct _SOLID_LDR_MGR_INFO_ SOLID_LDR_MGR_INFO
SOLID_LDR_GetManagedAreaInfo
- 
int SOLID_LDR_GetManagedAreaInfo(SOLID_LDR_MGR_INFO *pInfo)
- ローダーの管理メモリ領域の使用状況を取得します。 - パラメータ:
- pInfo -- 使用状況を取得するバッファ 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー