2017-03-05 9 views
0

の値は構造体構造体のポインタのオフセット、そしてどのように組み立て

struct info{ 
    struct stat information; 
    char * filename 
} 

がありますと仮定し得るために、そして、私は今fOffsetが何であるか、ファイル名ポインタのオフセットを

size_t fOffset = offsetof(struct info, filename); 

を設定?

SPARCアセンブリでは、実際の文字列をfilenameに入れたいと思っています。これは私が今までに書いたものです。パラメータは情報構造体のポインタです

set fOffset, %l0 
ld [%l0], %l1 

add %i0, %l1, %l2 
ld [%l2], %l2 

ldub [%l2], %o0 

%o0は文字列を格納すると考えましたが、明らかにそうではありません。誰か助けて?

+1

オフセット'struct stat'の定義と使用するコンパイラの実装や設定に依存します。 – MikeCAT

+0

私はこの質問が構造体statに関係しているとは思わない、構造体情報内のcharポインタメンバーに関するものです。 – faker

+1

'fOffset'の値はおそらく' sizeof(struct stat) 'になります。アセンブリでそのサイズを判断することはできません。正しいサイズを知っているか、アセンブリではなくCを使用する必要があります。 –

答えて

0

fOffset宣言を正しく実行したので、構造体にfilenameのオフセットが含まれます。私はあなたのアセンブリが正しいと思うが、 "%o2が文字列を格納する"という意味がわからない。コードの最後に%l2は文字列へのポインタで、%o2には文字列の最初のバイトが入ります。だからあなたのコードは私には正しいと思われます。

間違ってすることができるもののいくつかのアイデア:

  • をファイル名はポインタであることから、おそらくmalloc関数で、何かにそれを初期化する必要があります。あなたがこれをしないと、ポインタが無効になるのでおそらくldub命令に欠陥があるでしょう
  • あなたのコードから32ビットのユーザランドを使用していると思いますが、実行している場合、これらすべての "LD" 命令は "LDX"

する必要があり、64ビットのユーザランドはまた、あなたはシーケンスを簡素化することができますのでご注意:

add %i0, %l1, %l2 
ld [%l2], %l2 

ただ一つの命令に:

ld [%i0+%l1], %l2 
関連する問題