![]() |
|
|
![]()
|
|
| 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. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |