私はプロジェクトの16進数と19ビットのファイルとしてブートローダを使用していますので、その内容を変更することはできません。このブートローダでは、私のアプリケーションが有効なアプリケーションであるかどうかを確認するには、次のように実装部分があります:メモリ内の別のアドレスを間接参照することによって、特定のアドレスをメモリ内に逆参照する方法はありますか?
#define CHECK_PATTERN_ADDRESS ((int32)0x00020000)
#define VALID_PATTERN ((int16)0xE900)
#define VALID_PATTERN_MASK ((int16)0xFF00)
int16 pattern_data = *(int16 *)CHECK_PATTERN_ADDRESS;
if ((pattern_data & VALID_PATTERN_MASK) == VALID_PATTERN)
{
//Valid application
}
else
{
//Not Valid application
}
上記のコードから、有効なものとして私のアプリケーションを検討するブートローダのために、それを置くために必要とされています前述のアドレス「0x00020000」の有効なパターン。
このパターンは、アプリケーションのダウンロード中にこのアドレスに直接ロードされます。
これは、このパターンを含むアセンブリファイルを使用して、リンカーファイルを介してメモリにロードされるアドレスを指定することによって行われます。
現在、有効なパターンは、アプリケーションのダウンロードプロセス中に前述のアドレス "0x00020000"に正常にロードされます。
主な制約がある:
ブートローダは、この特定のアドレスで有効なパターンを見つける必要があります「0x00020000」
問題がある:
私は有効なパターンを追加する必要があります別のアドレス「0x00040000と言う」で、DLLは要求されたアドレス「0x00020000」からのデータを逆参照し続ける。
それでも、元のアドレス「0x00020000」にアセンブリファイルを使ってデータを追加したり、このアドレスに特定の16進データを直接追加しても構いません。
質問がある:
私はこのアドレス「0x00020000」で何をロードすることができ、ブートローダは自身のコードでそれを使用する場合、それは他のアドレスにロードされた値を取るだろう「提供として上」というように"0x00040000"
DLL?これはWin32のものです。組み込みではなく、確かにブートローダとは関係ありません。特に、DLLはプロセスのアドレス空間で実行されます。そしてそれらは_virtual_アドレス空間を持っています。 – MSalters
はい、あなたが書いている、私はそれが16進数とs19ファイルとして使用されていることを意味..私はコードで変更する能力はありません..私は元の投稿で変更します..ありがとう.. –
IOW DLLには、EPROMなどに何かを書き込むための、またはエミュレータで使用するためのS19/16進ファイルが含まれていますか? –