![]() |
|
|
![]()
|
|
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 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 байта, как мне из єтой ситуации выкрутьться Помогите!!!!!!!!!!!!!!! |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
mov @y, dword x
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Эй ! Этот код скорее всего слетит. Осторожнее.
Сделать можно и так:
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
Chingachguk
ты прав ну я просто не знаю как дельфи потом будет компилить тодауж mov eax, x mov @y, dword eax -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 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; работает. но в ходе віполнения кода єто значение збивается и получается бред!!!! Что мне делать |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Какая ошибка ? Такой код должен компилится, даже специально щас проверил. Либо же ошибка у тебя выдается не в обсуждаемом месте... -------------------- С уважением, г-н Посол. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Этот код компилируется, но при выполнении его вылетает ошибка с сылкой на адрес, где мы все это дело обьявляли!
Что это такое? |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Тчнее при пробе записи в него какого-либо адреса из регистра!
Пример: porcedure x: var ... asm jmp @xx @xxx: dd 000000000h @xx: mov dword ptr @xxx, eax end; |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Тчнее при пробе записи в него какого-либо адреса из регистра!
Пример: porcedure x: var ... asm jmp @xx @xxx: dd 000000000h @xx: mov dword ptr @xxx, eax end; |
|||
|
||||
| oleg1973 |
|
|||
![]() 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 |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Я же говорил, когда обьявляешь переменную в var или в кавычках после слова procedure (rep: ....) , то в ходе выполнения кода их значения сбиваются, а особенно при вызове функций api. Так как в стеке содержиться ссылка ан них, а в ходе выполнения функции видно запишиваются свои данные и получается параша! Попробуй сам, если не верешь!!!
ЧТО МНЕ ДЕЛАТЬ |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 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 оно не работает, может я как-то не так записал Что вы на это скажешь? |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
А, я знаю, где собака подорвалась. Ты объявил переменную в сегменте кода, а такой сегмент для виндовых задач по умолчанию - executable, but not writeable ;) Писать туды нельзя ;) Если очень хочешш, то нужно вызывать специальную АПИ - VirtualProtectEx. Что ты вообще хочешь сделать с этой временной переменной ? Почему нельзя ее в стек ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
В эту временую переменную записуються временные данные!
А нсли в стек, то как я потом смогу найти это значение, ведь по мере вызова функций стек все более заполняеться! Что мне делать, кто может посоветовать? |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Еще раз. Скажи по возможности точнее, что именно ты хочешь сделать. Что означает "отрывается от моей проги" ? Почему так необходимо что-то писать в сегмент команд, а потом это читать ? Ты что, не можешь в уже оторвавшемся куске что-то получить ? Почему ты не можешь включить в отрывающийся кусок сегмент данных, в который можно спокойно писать ? Вообще. Ты пишешь dll ? Вроде так ведь можно "пристроиться" к чужому процессу ?
Посмотри материалы на wasm.ru. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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 -------------------- С уважением, г-н Посол. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
Chingachguk
писать в сегмент кода я посоветовал так как пишу я на асме и частенько чтоб не мучатся делаю единый сегмент и для кода и для данных естественно с возвожностью и писать и читать его -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Вот у меня нет такой возможности, так как эту процедурку я прикрепляю к левому файлу, вот и получается такая штука!
Читать то я могу, а вто писать нееееееееееееее...! Читаю: mov edi,[esp+4*5] lea eax, [edi + @Function] // теперь в eax @Function @Function: dd 000000000h Как теперь мне можно туда записать Кто-то говорил использовать специальную API, но я думаю это бред, но все может быть, если это будет просто и рационально!!!! Жду ваших ответов! |
|||
|
||||
| Chingachguk |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
я.
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||
|
|||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Chingachguk - API юзать ему нельзя, т.к. не знает адресов функций. Если бы знал, так и делать бы ничего не надо было бы...
kostik_16, если ты добавляешь новую секцию с кодом, то можно поставить доступ и для записи. Я ж тебе прислал пример, где присоединяется новая секция к файлу, и там же пример того, как при добавлении этой секции записывается старый адрес точки входа... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Я так понял, что он в дельфи готовит код, который насыщает адресами апи-функций, которые будет вызывать ... ну где-то там, в другой программе. Где-то там нельзя вызывать апи, но можно будет использовать заранее заготовленные адреса (в ячейках кода). Как я понял, он в заготовку не может писать, а не "там, вдали, за рекой..." -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Я определять адераса АПИ могу, так что смело могу их вызывать!!!!
И я не примоеденяю новую секцию, а приписываю код к последней - это более работоспасобно!!!! |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
яб не так сделал
можно хедер екзешника раздвинуть (тот кусок где стуб мсдосовский) и туда свой код пхнуть останется только изменить ентрупоинт у ехе на свой ну а вообщето к примеру upx ниче не дописывает упакованый файл внутри него лежит при запуске упх выделяет память копирует туда свою прос распаковки и начинает распаковывать ехешник прямо туда где тот и должен лежать если вы заметили у ориг и упакованого файла имаджебазе тотже будет с импорт табле тоже упх ниче не делает остается вроде она оригинальной -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
oleg1973, расскажи по-подробнее про upx. Если оригинальный exe распаковывается в память, то как он запускается ? Или я неправильно тебя понял...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: нет Всего: 1 |
Кроче я вчера понял свою ошибку!! Я просто протупил!!!!
Я прибавив свой код к секции забыл изменить ее характеристику, а там стояло только чтение и еще чет, а когда изменил, то все работает!!! Все спасибо за внимание! |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
p0s0l
ну да упх распаковывает ехешник к примеру с адреса 4001000 (не факт конешно все от ехешника зависит) импорт табле упх вообше не трогает просто нагло ее копирует от оригинального ехе поэтому при загрузке файла в память загрузчик винды сам туда подставляет нужные значения ну и все после распаковки просто управление передается ехешнику -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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 |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
запросто пример ниже
компилим все это дело в 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 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |