ローダー

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_LDR_GetDllAddr

int SOLID_LDR_GetDllAddr(const char *pDllName, const char *pSymbolName, SOLID_ADDRESS *pAddr)

ロードオブジェクトを指定してエクスポートされたシンボルのアドレスを取得します

パラメータ
  • pDllName -- 検索を行うロードオブジェクト名(文字列, NULL終端)

  • pSymbolName -- シンボル名(文字列, NULL終端)

  • pAddr -- 取得したアドレス

戻り値

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_LDR_CheckContent

int SOLID_LDR_CheckContent(const char *pFilename, SOLID_LDR_FILEINFO *pInfo)

メモリーにロードする前に、ローダブルアプリのロードアドレスやサイズ情報を取得します

パラメータ
  • pFilename -- ファイル名

  • pInfo -- 情報を取得するバッファ

戻り値

SOLID_LDR_LoadFile

int SOLID_LDR_LoadFile(const char *pName, const char *pFilename)

ファイルシステムからロード処理を行います

パラメータ
  • pName -- ロードオブジェクト名(文字列, NULL終端)

  • pFilename -- ロードするファイル名(文字列, NULL終端)

戻り値

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_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_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_LDR_GetObjectArea

int SOLID_LDR_GetObjectArea(const char *pName, SOLID_ADDRESS *pStartAddr, SOLID_ADDRESS *pEndAddr)

指定されたロードオブジェクトのロードされたメモリ領域を取得します。

パラメータ
  • pName -- ロードオブジェクト名(文字列, NULL終端)

  • pStartAddr -- ロードした領域の先頭アドレス

  • pEndAddr -- ロードした領域の終了アドレス+1

戻り値

SOLID_LDR_UnLoad

int SOLID_LDR_UnLoad(const char *pName)

指定されたロードオブジェクトをアンロードします

パラメータ
  • pName -- ロードオブジェクト名(文字列, NULL終端)

戻り値

SOLID_LDR_RegisterSymbol

int SOLID_LDR_RegisterSymbol(const char *pName, SOLID_ADDRESS addr)

シンボル情報を登録します

パラメータ
  • pName -- シンボル名(文字列, NULL終端)

  • addr -- アドレス

戻り値

SOLID_LDR_CheckUnresolved

int SOLID_LDR_CheckUnresolved(void)

未解決シンボルの数を確認します

戻り値

未解決シンボルの総数

SOLID_LDR_MGR_INFO

typedef struct _SOLID_LDR_MGR_INFO_ SOLID_LDR_MGR_INFO
struct _SOLID_LDR_MGR_INFO_

説明

ローダー管理領域メモリ使用状況構造体

定義

typedef struct _SOLID_LDR_MGR_INFO_ {
    size_t total;
    size_t used;
} SOLID_LDR_MGR_INFO;

メンバー

size_t total

管理領域総サイズ

size_t used

管理領域使用量

SOLID_LDR_GetManagedAreaInfo

int SOLID_LDR_GetManagedAreaInfo(SOLID_LDR_MGR_INFO *pInfo)

ローダーの管理メモリ領域の使用状況を取得します。

パラメータ
  • pInfo -- 使用状況を取得するバッファ

戻り値