2016-08-10 11 views
0

私はプロジェクトの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"

+1

DLL?これはWin32のものです。組み込みではなく、確かにブートローダとは関係ありません。特に、DLLはプロセスのアドレス空間で実行されます。そしてそれらは_virtual_アドレス空間を持っています。 – MSalters

+0

はい、あなたが書いている、私はそれが16進数とs19ファイルとして使用されていることを意味..私はコードで変更する能力はありません..私は元の投稿で変更します..ありがとう.. –

+0

IOW DLLには、EPROMなどに何かを書き込むための、またはエミュレータで使用するためのS19/16進ファイルが含まれていますか? –

答えて

1

0x00020000には、0x00040000 "拡張子"を認識しているコードの開始点を置くことができます。その後、ブートローダは通常のようにそのコードを起動し、そのコード(「セカンダリブートローダ」と呼ぶ)は0x00040000の下に置かれたコードを起動します。

関連する問題