目前我正在从内联汇编的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
答案 0 :(得分:0)
Windows上宽字符串中的字符(技术上code units)是两个字节,但是您正在构建字符串,就好像字符是一个字节一样。当你以这种方式得到UTF-16时它是tends to look Chinese。
您需要使用word ptr
操作数大小,当然您还需要每次向ebx
偏移量添加2。