Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Прочие языки программирования > Assembler
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.03.2013, 15:54
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию Запись адреса

Здравствуйте! Задача такова, есть такой код в ассемблере http://clip2net.com/clip/m195299/136....png?nocache=1 к fld qword ptr [eax+138] обращается адрес eax+138, так вот, мне нужно записать адрес eax в другой адрес специально выделенный заранее. Как такое можно сделать, приведите пожалуйста самые простые кодики)
Ответить с цитированием
  #2  
Старый 14.03.2013, 19:50
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

Жив кто не?
Ответить с цитированием
  #3  
Старый 14.03.2013, 21:41
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
fld qword ptr [eax+138] обращается адрес eax+138
Стоп-стоп-стоп. Вот у тебя есть адрес. Город Тюмень, улица Петрова, дом 9124 квартира 777. Как этот адрес может к кому-то обращаться? Более того: как можно поселить человека В этот адрес? Понимаю По адресу, или еще как... И что значит "адрес eax"? Адрес регистра? Это надо у Intel спрашивать, по какому адресу во внутренней памяти процессора у них регистр...
Я к чему: нормально сформулируй вопрос. Я не понял ни слова. Про обращающийся адрес, про адрес регистра, про запись адреса регистра еще в какой-то адрес...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 14.03.2013, 22:56
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

А все разобрался. Чтоб не создавать новую тему т.к. вопрос маленькой задам его сюда, как можно из
Код:
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  
Старый 14.03.2013, 23:06
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Берешь по два символа, переводишь из 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  
Старый 14.03.2013, 23:10
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

А вот сдела вот так
Код:
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;
Но почему то в Result записывается только первый байт
Ответить с цитированием
  #7  
Старый 14.03.2013, 23:20
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
if Length(S) < 22 then
Result := Pos(S, C) - 1
Если длина строки меньше 22, то он и не будет писать больше.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 14.03.2013, 23:48
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

Зделал 23, теперь ваще пишет белеберду какуюто
Ответить с цитированием
  #9  
Старый 15.03.2013, 00:01
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

С твоей функцией что-то вроде
Код:
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  
Старый 15.03.2013, 00:10
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

Выдает ошибку http://clip2net.com/s/4KM8Tw
Ответить с цитированием
  #11  
Старый 16.03.2013, 04:08
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Было ж написано "что-то вроде", а не "точно так", да и сообщение компилятора вполне понятно - счётчик цикла не целочисленный. Вот так попробуй
Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter