2017-03-02 5 views
-1

現在、私は、インラインアセンブリからkernel32.dllからCreateFile2を呼び出しています。最初のパラメータはLPCWSTRで、https://msdn.microsoft.com/en-us/library/windows/desktop/hh449422(v=vs.85).aspxに表示されます。ユニコード表現

ユニコード文字を渡す際に問題が発生しています。私の理解から、0x0065は 'A'のユニコード文字でなければならないが、奇妙な外国の文字がたくさんある。

ebxを 'A.txt'に設定しようとしていて、CreateFile2を呼び出していますが、作成されているファイルの名前が '䙥硴楆敬2'です。

以下は、私がebxに投げかけているユニコードの値です。どんな助けでも大歓迎です。

mov ebx, esp 
    mov byte ptr[ebx], 0x0065 
    mov byte ptr[ebx+1], 0x0046 
    mov byte ptr[ebx+2], 0x0074 
    mov byte ptr[ebx+3], 0x0078 
    mov byte ptr[ebx+4], 0x0074 
    mov byte ptr[ebx+5], 0 

    push 0 
    push 2 
    push 2 
    push 0x100000000 
    push ebx 
    call eax 
+2

プッシュする前にebxであると指摘された内容を見てください。あなたは 'word ptr'とebx、ebx + 2、ebx + 4などがほしいと思っています。 –

+0

投稿する直前にebx + 2の事を捕まえたばかりですが、movワードで修正しました。ありがとうございました。 – Feek

+0

また、 'A'は0x0041で、' .'は0x002Eです。 –

答えて

0

文字(技術的にcode units)Windows上のワイド文字列で2バイトですが、文字が1バイトであるかのように、あなたは、文字列を構築しています。あなたがUTF-16をこのように間違えると、tends to look Chineseになります。

オペランドサイズword ptrを使用する必要があります。また、毎回ebxに2を加算する必要があります。

関連する問題