ローダー
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
: 正常終了それ以外: エラー