1

GCCで組み込みプログラミングを行っています。Cコードで画像のベースアドレスを取得するにはどうすればよいですか?

PSリンカースクリプトで変数を設定できることはわかっています。しかし、わざわざスクリプトを変更せずにそれを達成する方法は他にありますか?

前もって感謝します。

4

2 に答える 2

0

私があなたの質問を正しく理解していれば、ベースアドレスを明示的に設定するのではなく、出力の一部としてベースアドレスが何に設定されたかを知りたいと考えています。

リンカーに引数を渡すことにより、コンパイルの一部としてマップ ファイルを生成できます。例えば:

gcc -Wall -o hello_world.exe -Wl,-Map,hello_world.map hello_world.c

関連するセクションは、オプションをリンカーに-Wl,-Map,hello_world.map渡し、ファイルを生成するように指示していることを意味します。-Maphello_world.map

結果の出力には多くの情報が含まれていますが、次のようなセクションを探しています。

Linker script and memory map

            0x00400000                __image_base__ = 0x400000
            0x00000000                __dll__ = 0x0
            0x00400000                ___ImageBase = 0x400000
            0x00001000                __section_alignment__ = 0x1000
            0x00000200                __file_alignment__ = 0x200
            0x00000004                __major_os_version__ = 0x4
            0x00000000                __minor_os_version__ = 0x0
            0x00000001                __major_image_version__ = 0x1
            0x00000000                __minor_image_version__ = 0x0
            0x00000004                __major_subsystem_version__ = 0x4
            0x00000000                __minor_subsystem_version__ = 0x0
            0x00000003                __subsystem__ = 0x3
            0x00200000                __size_of_stack_reserve__ = 0x200000
            0x00001000                __size_of_stack_commit__ = 0x1000
            0x00100000                __size_of_heap_reserve__ = 0x100000
            0x00001000                __size_of_heap_commit__ = 0x1000
            0x00000000                __loader_flags__ = 0x0
            0x00008000                __dll_characteristics__ = 0x8000

画像のベース アドレスと、スタック、ヒープ (ある場合)、およびすべての関数の場所が明確に表示されている必要があります。

于 2013-07-11T13:22:43.917 に答える