2016-05-02 6 views
0

x86のstlベクターにアクセスする方法がわかりません。私はそれをそうしようとしましたが、いくつかの誤りがあります。アセンブリコードでベクトルを使用する方法x86とSSE

mov ebx, stl_vector 
mov eax, [ebx] ;Here I want to store the first element of the vector 
mov edx, [ebx + 4] ; I want to store the second element of the vector 

私はSSE言語で同じことをしたいと思います。

ありがとうございます!

答えて

4

stlベクターはオブジェクトです。正確なクラスレイアウトが分からない限り、直接アクセスすることはできません。おそらく配列へのポインタとアセンブリ関数とは別にサイズを渡すべきでしょう。 asm(vector.data(), vector.size())ので、コンパイラはC++の処理を行います。

+0

メンバーに正しくアクセスするには、 'stl_vector'クラスの_vTableレイアウトを知る必要があります。あなたの 'mov eax、[ebx]'はたぶんおそらく 'stl_vector'クラスのデストラクタのアドレスを取得し、目的のデータフィールド(アドレス)は取得しません。このレイアウトは、コンパイラーのバージョン間で変更される可能性があります。 – zx485

+0

配列を取得したら、どのように要素にアクセスできますか?前に書いたように?ありがとうございました! –

+0

はい、もしあなたが 'ebx'にアドレスを持っていれば' [ebx] 'と' [ebx + 4] 'はそれぞれ第1と第2の要素になります。 – Jester

関連する問題