Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несложный вопрос! Но срочный вопрос!!!!! 
:(
    Опции темы
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   Вверх
p0s0l
Дата 21.12.2003, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



kostik_16, API не портит стек, я почти на 100% уверен, что ты используешь регистр EBP, а Delphi компилирует обращение к локальным var-переменным через EBP.

Это сообщение отредактировал(а) p0s0l - 21.12.2003, 13:13


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


asm fanat
****


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

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



Chingachguk
писать в сегмент кода я посоветовал smile.gif
так как пишу я на асме
и частенько чтоб не мучатся делаю единый сегмент и для кода и для данных
естественно с возвожностью и писать и читать его



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


Бывалый
*


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

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



Вот у меня нет такой возможности, так как эту процедурку я прикрепляю к левому файлу, вот и получается такая штука!

Читать то я могу, а вто писать нееееееееееееее...!

Читаю:
mov edi,[esp+4*5]
lea eax, [edi + @Function]

// теперь в eax @Function

@Function: dd 000000000h

Как теперь мне можно туда записатьconfused.gifconfused.gif
Кто-то говорил использовать специальную API, но я думаю это бред, но все может быть, если это будет просто и рационально!!!!

Жду ваших ответов!
PM MAIL   Вверх
Chingachguk
Дата 22.12.2003, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Кто-то говорил использовать специальную API, но я думаю это бред


я.

Цитата

ChangeZoneSize equ @@SkipModify - @@Modify
; Открываем на запись байты

; Получить ID текущего процесса
  invoke GetCurrentProcess
  mov CurrProcID,eax

; Вывевсти на экран результат
.data
OKProcID db "Current Process ID: confused.gifconfused.gif??",0
.data?
OldProtectAPI db 100h dup(?) ; Фиг знает, что это ;)
.code
  mov edi,offset OKProcID+20
  call HexChar ; Моя функция форматирования
  invoke MessageBox,NULL,addr OKProcID,addr AppName,MB_OK+MB_ICONINFORMATION

; Открыть на чтение и запись первые ChangeDLLZoneSize
; if(not VirtualProtectEx(GetCurrentProcess(),ptr_proc, 6,
;        PAGE_EXECUTE_READWRITE, OldProtectAPI)) - кусок примера из Delphi
  push offset OldProtectAPI
  push PAGE_EXECUTE_READWRITE
  push ChangeZoneSize ; OK ?
  push dword ptr offset @@Modify
  push dword ptr CurrProcID
  call VirtualProtectEx
  test eax,eax
  jnz @@AttribSet
.data
ErrProtEx db "Virtual Protect Ex error !",0
.code
  invoke MessageBox,NULL,addr ErrProtEx,NULL,MB_OK+MB_ICONERROR
  jmp @@Exit
@@AttribSet:

; Избегунть попадания в участок Modify- SkipModify
  jmp @@SkipModify
@@Modify: 
  nop
  nop
  nop
  nop
  nop
  nop
  nop
@@SkipModify:

; Эти команды приведут к JPF, если только не отработает VirtualProtectEx
  mov eax,offset @@Modify
  mov dword ptr [eax],666h





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


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


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

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



Chingachguk - API юзать ему нельзя, т.к. не знает адресов функций. Если бы знал, так и делать бы ничего не надо было бы...

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



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


Эксперт
***


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

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



Цитата

API юзать ему нельзя, т.к. не знает адресов функций. Если бы знал, так и делать бы ничего не надо было бы...


Я так понял, что он в дельфи готовит код, который насыщает адресами апи-функций, которые будет вызывать ... ну где-то там, в другой программе. Где-то там нельзя вызывать апи, но можно будет использовать заранее заготовленные адреса (в ячейках кода). Как я понял, он в заготовку не может писать, а не "там, вдали, за рекой..."


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


Бывалый
*


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

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



Я определять адераса АПИ могу, так что смело могу их вызывать!!!!
И я не примоеденяю новую секцию, а приписываю код к последней - это более работоспасобно!!!!
PM MAIL   Вверх
oleg1973
Дата 22.12.2003, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


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

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



яб не так сделал
можно хедер екзешника раздвинуть (тот кусок где стуб мсдосовский) и туда свой код пхнуть
останется только изменить ентрупоинт у ехе на свой
ну а вообщето к примеру upx ниче не дописывает
упакованый файл внутри него лежит
при запуске упх выделяет память копирует туда свою прос распаковки
и начинает распаковывать ехешник прямо туда где тот и должен лежать
если вы заметили у ориг и упакованого файла имаджебазе тотже будет
с импорт табле тоже упх ниче не делает
остается вроде она оригинальной



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


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


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

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



oleg1973, расскажи по-подробнее про upx. Если оригинальный exe распаковывается в память, то как он запускается ? Или я неправильно тебя понял...




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


Бывалый
*


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

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



Кроче я вчера понял свою ошибку!! Я просто протупил!!!!
Я прибавив свой код к секции забыл изменить ее характеристику, а там стояло только чтение и еще чет, а когда изменил, то все работает!!!
Все спасибо за внимание!
PM MAIL   Вверх
oleg1973
Дата 26.12.2003, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


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

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



p0s0l
ну да упх распаковывает ехешник к примеру с адреса 4001000 (не факт конешно все от ехешника зависит)
импорт табле упх вообше не трогает просто нагло ее копирует от оригинального ехе
поэтому при загрузке файла в память загрузчик винды сам туда подставляет нужные значения
ну и все после распаковки просто управление передается ехешнику


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


Эксперт
***


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

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



Хм... а нельзя сделать просто отдельный объектник с этой функцией на чистом асме и потом его подлинковать к основной проге? Разобраться только с конвенцией вызова функций - это должно где-то быть описано вместе с компилером...


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 2.1.2004, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


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

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



запросто пример ниже smile.gif

компилим все это дело в fasm получаем *.obj
потом берем COFF2OMF.EXE
конвертируем и можно к дельфи проэкту подключить
проверено работает

format MS COFF ;указываем выходной формат OBJ файла
include '%fasminc%\win32a.inc'
public myfunc ;экспортируемая процедура
section '.text' code readable executable
proc myfunc,param
enter
mov eax,param
return

Это сообщение отредактировал(а) oleg1973 - 2.1.2004, 18:03


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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