|
#1
|
|||
|
|||
Запись адреса
Здравствуйте! Задача такова, есть такой код в ассемблере http://clip2net.com/clip/m195299/136....png?nocache=1 к fld qword ptr [eax+138] обращается адрес eax+138, так вот, мне нужно записать адрес eax в другой адрес специально выделенный заранее. Как такое можно сделать, приведите пожалуйста самые простые кодики)
|
#2
|
|||
|
|||
Жив кто не?
|
#3
|
||||
|
||||
Цитата:
Я к чему: нормально сформулируй вопрос. Я не понял ни слова. Про обращающийся адрес, про адрес регистра, про запись адреса регистра еще в какой-то адрес... jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
|||
|
|||
А все разобрался. Чтоб не создавать новую тему т.к. вопрос маленькой задам его сюда, как можно из
Код:
S:String; S:='F30F7E4260BBFFFFFFFF660F57C9F20F'; Конвертировать в байты что-бы получилось такое: Код:
Value : Array [0..15] of Byte = ($F3, $0F, $7E, $42, $60, $BB, $FF, $FF, $FF, $FF, $66, $0F, $57, $C9, $F2, $0F); |
#5
|
||||
|
||||
Берешь по два символа, переводишь из HEX в число.
Код:
a[0] := s[1] - '0'; if (a[0] > '9') a[0] := a[0] + '0' - 'A' + 10; a[1] := s[2] - '0'; if (a[1] > '9') a[1] := a[1] + '0' - 'A' + 10; a[0] := a[0] shl 4 + a[1]; jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
|||
|
|||
А вот сдела вот так
Код:
function Hex2Byte(S : String):Byte; const C:string[16]='0123456789ABCDEF'; begin if Length(S) < 22 then Result := Pos(S, C) - 1 else Result := (Pos(S[1], C) - 1)*16 + Pos(S[2], C) - 1 end; |
#7
|
||||
|
||||
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
|||
|
|||
Зделал 23, теперь ваще пишет белеберду какуюто
|
#9
|
||||
|
||||
С твоей функцией что-то вроде
Код:
function Hex2Byte(S : String):Byte; const C:string[16]='0123456789ABCDEF'; begin if Length(S) < 2 then Result := (Pos(S[1], C) - 1) shl 4 else Result := ((Pos(S[1], C) - 1) shl 4) + Pos(S[2], C) - 1 end; ... for i := 0 to (length(s) - 1)/ 2 do a[i] := Hex2Byte(Copy(s, i * 2 + 1, 2)); jmp $ ; Happy End! The Cake Is A Lie. |
#10
|
|||
|
|||
Выдает ошибку http://clip2net.com/s/4KM8Tw
|
#11
|
||||
|
||||
Было ж написано "что-то вроде", а не "точно так", да и сообщение компилятора вполне понятно - счётчик цикла не целочисленный. Вот так попробуй
Код:
function Hex2Byte(S : String):Byte; const C:string[16]='0123456789ABCDEF'; begin if Length(S) < 2 then Result := Pos(S[1], C) - 1 else Result := (Pos(S[1], C) - 1) shl 4 + Pos(S[2], C) - 1 end; ... for i := 0 to length(s) shr 1 + length(s) mod 2 - 1 do a[i] := Hex2Byte(Copy(s, i * 2 + 1, 2)); Последний раз редактировалось BBBCat, 16.03.2013 в 05:33. |