2017-10-25 10 views
-1

グローバルポインタを宣言して初期化するCコードがあります。このような何か:私は私が持っているコンテンツにアクセスしたい時はいつでもので本当に不便である私は、ASM x86の内でexternシンボルとしてVARを宣言するとASMデータセクションのポインタを逆参照する方法は?

my_type* var = malloc(...) 

は、私は、ポインタへの参照を取得、すなわち二重のポインタ、このような何かを:私はつまり、私はCコードを持っているようmy_typeするポインタのmallocによって返された値を、保持しているASMでシンボルを取得したい

extern var 
mov ax, [var] 
mov dx, [ax] 

これを行う方法はありますか?

+1

ASMコードの関連部分を表示できますか? –

+0

'&var'はダブルポインタですか?だから、mallocされたメモリにアクセスするために2回ロードする必要がありますか?はい、そういうことは、mallocの戻り値をレジスタに渡すのではなく、メモリに格納するときに起こります。 –

+0

ASMにコードサンプルを追加しました。大括弧を二度使用しないようにしたいと思います。 –

答えて

3

これは変数の仕組みです。シンボル(すなわちそのアドレス)の値は実行時に変更することができないため、記号は一般にデータム自体ではなくデータのアドレスに解決される。アドレスmallocリターンはリンク時に知ることができないので、あなたが望む正確な行動を得る方法はありません。

ポインタを含む変数を扱わないようにするには、代わりに静的記憶域に配列を作成することを検討してください。

関連する問題