2017-03-02 58 views
-1

目前我正在調用來自內聯程序集的kernel32.dll的CreateFile2。第一個參數是LPCWSTR,可以在https://msdn.microsoft.com/en-us/library/windows/desktop/hh449422(v=vs.85).aspx處看到。Unicode代表

我遇到了傳入unicode字符的問題。根據我的理解,0x0065應該是'A'的Unicode字符,但我收到了一堆奇怪的外來字母。

我想設置ebx爲'A.txt',然後調用CreateFile2,但正在創建的文件名稱爲'䙥硴t楆敬2'。

下面是我投入ebx的unicode值,非常感謝任何幫助。

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 word固定了它。謝謝。 – Feek

+0

另外,'A'是0x0041,'.'是0x002E。 –

回答

0

字符(技術上code units)在Windows寬字符串是兩個字節,但彷彿字符是一個字節正在構建的字符串。當你以這種方式得到UTF-16錯誤時tends to look Chinese

您需要使用word ptr操作數大小,並且您當然也需要每次都將偏移量加上ebx