2017-03-02 10 views
-1

Momentan arbeite ich an dem Aufruf von CreateFile2 von kernel32.dll von Inline-Assembly. Der erste Parameter ist LPCWSTR und kann unter https://msdn.microsoft.com/en-us/library/windows/desktop/hh449422(v=vs.85).aspx eingesehen werden.Unicode-Darstellung

Ich habe Probleme mit der Übergabe von Unicode-Zeichen. Aus meiner Sicht sollte 0x0065 der Unicode-Charakter für 'A' sein, aber ich bekomme eine Menge seltsamer ausländischer Buchstaben.

Ich versuche, ebx auf "A.txt" zu setzen, dann CreateFile2 aufrufen, aber die Datei, die erstellt wird, hat den Namen "楆 硴 t 楆 敬 2".

Unten ist die Unicode-Werte, die ich in ebx werfen, jede Hilfe wird sehr geschätzt.

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

Werfen Sie einen Blick auf den Inhalt ebx, bevor Sie es drücken. Du willst 'word ptr' und ebx, ebx + 2, ebx + 4, usw. –

+0

Ich habe gerade die ebx + 2-Sache direkt vor dem Posten gefangen, aber das mov-Wort hat es behoben. Vielen Dank. – Feek

+0

Außerdem ist "A" 0x0041 und "." Ist 0x002E. –

Antwort

0

Charaktere (technisch code units) in Wide-Strings auf Windows sind zwei Bytes, aber Sie bauen die Zeichenfolge als wenn die Zeichen ein Byte sind. Wenn Sie UTF-16 falsch auf diese Weise erhalten, ist es tends to look Chinese.

Sie müssen die word ptr Operandengröße verwenden und Sie müssen natürlich auch 2 zum ebx10 Offset jedes Mal hinzufügen.