Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несложный вопрос! Но срочный вопрос!!!!! 
:(
    Опции темы
kostik_16
  Дата 18.12.2003, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Еще небольшая проблемка возникла!

Мне надо из переменной x присвоить значение переменной у.

Я это делаю так:

var
x: cardinal

procedure xx:
asm
@y: dd 000000000h
mov @y, x
end;
Пишет тогда:
[Error] Read.pas(99): Operand size mismatch

Если :
var
x: cardinal

procedure xx:
asm
@y: dd 000000000h
mov eax, x
mov @y, eax
end;
Тогда:
[Error] Read.pas(99): Invalid combination of opcode and operands


Ведь тип cardinal - 4 байта , и вв - 4 байта, как мне из єтой ситуации выкрутьтьсяconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gif??

Помогите!!!!!!!!!!!!!!!
PM MAIL   Вверх
oleg1973
Дата 18.12.2003, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



mov @y, dword x



--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 18.12.2003, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Эй ! Этот код скорее всего слетит. Осторожнее.

Сделать можно и так:

Цитата

var
x: cardinal

procedure xx:
asm
  jmp @@SkipData
@y dd 000000000h
@@SkipData:
  push dword ptr x
  pop  dword ptr @y
end;




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
oleg1973
Дата 19.12.2003, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



Chingachguk
ты прав
ну я просто не знаю как дельфи потом будет компилить
тодауж
mov eax, x
mov @y, dword eax




--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
kostik_16
Дата 19.12.2003, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Чет не работает, оно постаянно ругается!

Если писать:

porcedure x:
var
...
asm
jmp @xx
@xxx: dd 000000000h
@xx:
mov dword ptr @xxx, eax
end;

пишет ошибку!!!!

Если например:
porcedure x:
var
...
asm
jmp @xx
@xxx: dd 000000000h
@xx:
mov @xxx, dword eax
end;

То выдает:
[Error] Read.pas(202): Operand size mismatch

но а если:
porcedure x:
var
xxx: cardinal;

asm
@xx:
mov xxx,eax
end;

работает. но в ходе віполнения кода єто значение збивается и получается бред!!!!

Что мне делать confused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gif
PM MAIL   Вверх
p0s0l
Дата 19.12.2003, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
Если писать:

porcedure x:
var
...
asm
jmp @xx
@xxx: dd 000000000h
@xx:
mov dword ptr @xxx, eax
end;

пишет ошибку!!!!

Какая ошибка ? Такой код должен компилится, даже специально щас проверил. Либо же ошибка у тебя выдается не в обсуждаемом месте...



--------------------
С уважением, г-н Посол.
PM   Вверх
kostik_16
Дата 20.12.2003, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Этот код компилируется, но при выполнении его вылетает ошибка с сылкой на адрес, где мы все это дело обьявляли!
Что это такое?
PM MAIL   Вверх
kostik_16
Дата 20.12.2003, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Тчнее при пробе записи в него какого-либо адреса из регистра!

Пример:
porcedure x:
var
...
asm
jmp @xx
@xxx: dd 000000000h
@xx:
mov dword ptr @xxx, eax
end;
PM MAIL   Вверх
kostik_16
  Дата 20.12.2003, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Тчнее при пробе записи в него какого-либо адреса из регистра!

Пример:
porcedure x:
var
...
asm
jmp @xx
@xxx: dd 000000000h
@xx:
mov dword ptr @xxx, eax
end;
PM MAIL   Вверх
oleg1973
Дата 20.12.2003, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



var
myvar:byte;
begin
asm
mov myvar,al
end;
end;

end.


kostik_16
а самому лень поэксперементировать?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
kostik_16
Дата 20.12.2003, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Я же говорил, когда обьявляешь переменную в var или в кавычках после слова procedure (rep: ....) , то в ходе выполнения кода их значения сбиваются, а особенно при вызове функций api. Так как в стеке содержиться ссылка ан них, а в ходе выполнения функции видно запишиваются свои данные и получается параша! Попробуй сам, если не верешь!!!


ЧТО МНЕ ДЕЛАТЬconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gifconfused.gif??


PM MAIL   Вверх
kostik_16
Дата 20.12.2003, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



Я понял свою ошибку я забыл упоменуть, что процедурка отрывается от клавной моей проги и работает на чужой из-за этого и вылетает ошибка, так как при компилировании там остались старые одреса на мою прогу!!

Я сделал так:
mov edi,[esp+4*5]
mov eax, [edi + @GetProcAddress_]

и в eax получается значение @GetProcAddress_, коорче работает, но как мне записать туда что-либо, при:

mov edi,[esp+4*5]
mov [edi + @GetProcAddress_], eax

оно не работает, может я как-то не так записалconfused.gif?

Что вы на это скажешь?
PM MAIL   Вверх
Chingachguk
Дата 20.12.2003, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

Этот код компилируется, но при выполнении его вылетает ошибка с сылкой на адрес, где мы все это дело обьявляли!
Что это такое? 
 


А, я знаю, где собака подорвалась. Ты объявил переменную в сегменте кода, а такой сегмент для виндовых задач по умолчанию - executable, but not writeable ;) Писать туды нельзя ;) Если очень хочешш, то нужно вызывать специальную АПИ - VirtualProtectEx.

Что ты вообще хочешь сделать с этой временной переменной ? Почему нельзя ее в стек ?


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
kostik_16
Дата 21.12.2003, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 23.7.2003

Репутация: нет
Всего: 1



В эту временую переменную записуються временные данные!

А нсли в стек, то как я потом смогу найти это значение, ведь по мере вызова функций стек все более заполняеться!

Что мне делать, кто может посоветовать?
PM MAIL   Вверх
Chingachguk
Дата 21.12.2003, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Еще раз. Скажи по возможности точнее, что именно ты хочешь сделать. Что означает "отрывается от моей проги" ? Почему так необходимо что-то писать в сегмент команд, а потом это читать ? Ты что, не можешь в уже оторвавшемся куске что-то получить ? Почему ты не можешь включить в отрывающийся кусок сегмент данных, в который можно спокойно писать ? Вообще. Ты пишешь dll ? Вроде так ведь можно "пристроиться" к чужому процессу ?

Посмотри материалы на wasm.ru.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0969 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.