Re: Längsten Maschinencode bei Intel-x86

15/11/2008 - 12:33 von Hubert Seidel | Report spam
Hallo Stefan,

"Stefan Reuther" <stefan.news@arcor.de> schrieb im
Newsbeitrag news:gfl0fc.1o8.1@stefan.msgid.phost.de...


Hubert Seidel wrote:
> Nur so als Beispiel:
> Den làngsten Code kann man hiermit generieren (bei 16Bit für 32Bit):
>
> LOCK MOV DWORD [ES:EAX*8+EAX+$12345678],$12345678
> wird zu:
> db $F0,$26,$66,$67,$C7,$84,$C0,$78,$56,$34,$12,$78,$56,$34,$12
>
> Ob der LOCK wirklich Sinn macht, weis ich jetzt gerade nicht :)

Bei MOV ist LOCK nicht sinnvoll, aber du darfst das LOCK z.B. durch


ein

ADD ersetzen.



Ok. Natürlich meintest Du MOV durch ADD ersetzen, dann sieht's so aus:
LOCK ADD DWORD [ES:EAX*8+EAX+$12345678],$12345678
wird zu:
db $F0,$26,$66,$67,$81,$84,$C0,$78,$56,$34,$12,$78,$56,$34,$12
### <= X
habe insgesamt folgende Variationen für X gefunden:
$69 : imul
$81 : add
$C7 : mov
$F7 : test

Ein LOCK macht vermutlich wirklich nur bei ADD ein Sinn :)

mfg.
Herby

P.S:
Da ich beim Senden eine Fehlermeldung erhalten habe wg.
zu langer Reference, habe ich ein neuen Zweig geöffnet.
Ich kenn mich ja nicht mit dem Protokoll so gut auch nicht aus :/

http://www.hubert-seidel.de
 

Lesen sie die antworten

#1 Stefan Reuther
15/11/2008 - 17:07 | Warnen spam
Hubert Seidel wrote:
"Stefan Reuther" schrieb im
Hubert Seidel wrote:
LOCK MOV DWORD [ES:EAX*8+EAX+$12345678],$12345678
wird zu:
db $F0,$26,$66,$67,$C7,$84,$C0,$78,$56,$34,$12,$78,$56,$34,$12

Ob der LOCK wirklich Sinn macht, weis ich jetzt gerade nicht :)



Bei MOV ist LOCK nicht sinnvoll, aber du darfst das LOCK z.B. durch
ein ADD ersetzen.



Ok. Natürlich meintest Du MOV durch ADD ersetzen, dann sieht's so aus:



Hrmpf, ja.

LOCK ADD DWORD [ES:EAX*8+EAX+$12345678],$12345678
wird zu:
db $F0,$26,$66,$67,$81,$84,$C0,$78,$56,$34,$12,$78,$56,$34,$12
### <= X
habe insgesamt folgende Variationen für X gefunden:
$69 : imul
$81 : add
$C7 : mov
$F7 : test

Ein LOCK macht vermutlich wirklich nur bei ADD ein Sinn :)



Die anderen Arithmetikoperationen darfst du auch noch nehmen (adc, sub,
sbb, and, or, xor), die unterscheiden sich im reg-Feld (was bei dir $84
ist).

LOCK ist eigentlich für read-modify-write-Instruktionen gedacht. Ob es
auch was bringt, wenn man einen nicht korrekt ausgerichteten Speicher-
operanden ausschließlich lesend oder schreibend verarbeitet (um halt die
entstehenden mehreren Buszyklen zu einem zusammenzufassen), bin ich
jetzt überfragt.

P.S:
Da ich beim Senden eine Fehlermeldung erhalten habe wg.
zu langer Reference, habe ich ein neuen Zweig geöffnet.
Ich kenn mich ja nicht mit dem Protokoll so gut auch nicht aus :/



Dann bring deinem Neuigkeitenverbreitungsgruppenclient doch einfach bei,
die References zu kürzen :-)


Stefan

Ähnliche fragen