Unicode表示

时间:2017-03-02 02:40:03

标签: windows assembly unicode x86

目前我正在从内联汇编的kernel32.dll调用CreateFile2。第一个参数是LPCWSTR,可以在https://msdn.microsoft.com/en-us/library/windows/desktop/hh449422(v=vs.85).aspx看到。

我遇到传递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

1 个答案:

答案 0 :(得分:0)

Windows上宽字符串中的字符(技术上code units)是两个字节,但是您正在构建字符串,就好像字符是一个字节一样。当你以这种方式得到UTF-16时它是tends to look Chinese

您需要使用word ptr操作数大小,当然您还需要每次向ebx偏移量添加2。