Einzelnen Beitrag anzeigen

Assarbad
(Gast)

n/a Beiträge
 
#19

Re: Kleiner und schneller Portscanner (nonVCL) mit EXE!

  Alt 15. Aug 2003, 21:15
Zitat von Hagen:
Natürlich kann garnicht jede CPU Operation atomic sein.
Falsch, sie muß es sogar sein! Du kannst die auf dem Level der Maschinensprache nicht weiter aufspalten! Wie komplex der darunterliegende Microcode ist, ist komplett irrelevant (, denn in der CPU wird jeder Opcode quasi wie eine Funktion behandelt ... bevor diese nicht zurückkehrt, gehts auch nicht weiter (1))!

Zitat von Hagen:
Selbst das Laden eines Integers in EAX mit MOV EAX,[Adresse] ist nur zu 1/4 atomic.
Sorry, sehe ich nicht so! EAX ist 4 Byte breit, also werden 4 Byte von dieser Adresse gelesen, komme was da wolle! Das hat was mit der Breite der Operanden zu tun. Der Assembler wird sich zB weigern sowas zu machen:

Code:
mov EAX, BYTE PTR [Adresse]
mov EAX, WORD PTR [Adresse]
Und dies aus gutem Grunde. Sollte ich was übersehen haben, kannst du gern nochmal ins Detail geben.

Hier noch die Unterstützung meiner Argumentation:
Code:
88 / r    MOV r/m8,r8       Move r8 to r/m8
89 / r    MOV r/m16,r16       Move r16 to r/m16
89 / r    MOV r/m32,r32       Move r32 to r/m32
8A / r    MOV r8,r/m8       Move r/m8 to r8
8B / r    MOV r16,r/m16       Move r/m16 to r16
8B / r    MOV r32,r/m32       Move r/m32 to r32
8C / r    MOV r/m16,Sreg**    Move segment register to r/m16
8E / r    MOV Sreg,r/m16**    Move r/m16 to segment register
A0    MOV AL, moffs8*    Move byte at ( seg:offset) to AL
A1    MOV AX, moffs16*    Move word at ( seg:offset) to AX
A1    MOV EAX, moffs32*    Move doubleword at ( seg:offset) to EAX
A2    MOV moffs8*,AL       Move AL to ( seg:offset)
A3    MOV moffs16*,AX    Move AX to ( seg:offset)
A3    MOV moffs32*,EAX    Move EAX to ( seg:offset)
B0+ rb    MOV r8,imm8       Move imm8 to r8
B8+ rw   MOV r16,imm16       Move imm16 to r16
B8+ rd    MOV r32,imm32       Move imm32 to r32
C6 / 0    MOV r/m8,imm8       Move imm8 to r/m8
C7 / 0    MOV r/m16,imm16    Move imm16 to r/m16
C7 / 0    MOV r/m32,imm32    Move imm32 to r/m32
Verschiedene Operandenbreiten und -Kombinationen führen zu verschiedenen Opcodes.

(1): Hyperthreading schaltet nur unabhängige Befehle parallel ... und beim Itanium das Ausführen aufs Gratewohl (also sozusagen nach vorbeugend) ändert auch an oben geschildertem nix!
  Mit Zitat antworten Zitat