2016-04-12 6 views
0

Ich habe ein Problem mit jedem Byte separat Manipulieren von einer hexadezimalen Zahl, zum Beispiel:Wie mit jedem Byte in einem DDword separat in Assembly arbeiten?

Schlüssel: DD 0xCAEFBABE

von dieser, ich CA nehmen will und eine andere DWort machen wie

0x CA notCA CA notCA

und mit ihm arbeiten, und dann Pass auf das zweite Byte EF und mache das Gleiche.

Können Sie mir einen Rat oder eine Methode zur Verarbeitung geben?

+0

Aus Ihrer Frage nicht klar ist, ob Sie dies zum Zeitpunkt der Kompilierung oder zur Laufzeit machen wollen. – Michael

+0

Ich möchte es zur Laufzeit tun, eigentlich muss ich eine Funktion machen, die den Schlüssel durchläuft und jedes Byte nimmt und daraus einen weiteren Schlüssel macht. – IdelHamza

Antwort

1

, das einfach genug sein sollte:

key: dd 0xCAEFBABE 
foo: dd 0 

mov ah,[key + 3] ; 0xCA 
mov al,ah 
not al   ; ax = (0xCA << 8) | not CA 
mov [foo],ax  
mov [foo+2],ax ; foo = 0xCA(not CA)CA(not CA) 
+0

Michael, vielen Dank, und um das Ergebnis zu drucken, muss ich nur die Eax in meine C++ Funktion schieben? – IdelHamza

+0

Oder ist der neue Schlüssel in foo? – IdelHamza

+0

Der neue Wert ist in 'foo'. Sie könnten es in 'Schlüssel' speichern, wenn Sie möchten - aber es wäre einfacher, die verbleibenden Bytes des ursprünglichen Schlüssels zu verarbeiten, wenn Sie es intakt lassen. – Michael

0

Ja. In x86-Assembly (ich verwende MASM-Syntax) ist das einfach. Sie verwenden ein Register, um die Adresse zu beheben und beziehen sich auf sie:

lea esi, key 

Dann greifen Sie den Inhalt und die Maske das Ergebnis (in ‚Little-Endian-Format‘ von x86 das niedrigste Byte zuerst so dass diese Arbeiten in sequentiellen Speicher Auftrag kommt).

mov eax, dword ptr [esi] 
and eax, 0FFh 

den nächsten DWORD Zugriff sieht aus wie

mov eax, dword ptr [esi+1] 
and eax, 0FFh 
+0

Entschuldigung, aber kann ich fragen, was 0FFh bedeutet? Vielen Dank. – IdelHamza

+0

'0FFh' bezeichnet nur einen hexadezimalen Wert von 255 in der MASM-Syntax. 'h' ist das Suffix für 'hexadezimal' und '0' ist das Präfix für 'eine Zahl folgt'. --- Meine Antwort ist anders und wahrscheinlich nicht passend, aber wenn Sie beide Antworten kombinieren, erhalten Sie wahrscheinlich ein gutes Ergebnis. – zx485

+0

Vielen Dank so much :). – IdelHamza