eXeL@B —› Программирование —› loop & asm |
Посл.ответ | Сообщение |
|
Создано: 10 июня 2012 14:19 · Поправил: opcodes · Личное сообщение · #1 Доброе время суток. Подскажите по поводу этой процедуры, как сохранить значение в ECX? т.е если в теле будут апи, тогда ЕСХ утратит свое прежнее значение. Куда его сохранить? Если в стек помещать, то после того как пройдутся апи, то, то значение хрен найдешь. А если через данные, то Loop будет менять только регистр, и тоже получается бесконечный цикл. Подскажите решение. Спасибо. |
|
Создано: 10 июня 2012 14:23 · Личное сообщение · #2 |
|
Создано: 10 июня 2012 14:27 · Поправил: -=AkaBOSS=- · Личное сообщение · #3 opcodes пишет: по поводу этой процедуры процедура-то где? opcodes пишет: Если в стек помещать, то после того как пройдутся апи, те значения хрен найдешь. ну почему? просто помещать нужно перед тем, как толкать параметры функции как вариант - считать итерации цикла, сохраняя значение в локальную переменную после чего что-то типа Code:
|
|
Создано: 10 июня 2012 15:01 · Личное сообщение · #4 BoRoV, Эго. AkaBOSS, естественно push'аю в самом начале. проследил вообщем за всем этим, отладчик Olly показал то что после выполнения 3-го параметра(они же выполняются с конца, значит 1-го) функции wsprintf стек будто перемешивается, и внизу уже утеряно число для ecx. По поводу других функций погорячился. |
|
Создано: 10 июня 2012 15:06 · Поправил: -=AkaBOSS=- · Личное сообщение · #5 opcodes пишет: стек будто перемешивается ну так правильно - wsprintf использует C конвенцию то есть стэк после него нужно очищать в вызывающем коде. e.g: Code:
где num_params - кол-во параметров, переданное в функцию opcodes пишет: внизу уже утеряно число для ecx всмысле, ВНИЗУ? если ты толкнул его раньше, он будет ВВЕРХУ стека, а остальные параметры - ниже его |
|
Создано: 10 июня 2012 15:26 · Поправил: opcodes · Личное сообщение · #6 AkaBOSS, в отладчике кстате есть уже строчка после вызова функции wsprintf, add esp, 12(3 параметра) в коде я сделал так .data format db "%d", 0 buffer dw ? digit db 10 .code invoke wsprintf, addr buffer, addr format, digit было вот так, в отладчике стояла строка add esp, 12 я после invoke wsprintf добавил еще add esp, 12. Эффекту не было. |
|
Создано: 10 июня 2012 15:35 · Личное сообщение · #7 |
|
Создано: 10 июня 2012 15:38 · Поправил: -=AkaBOSS=- · Личное сообщение · #8 opcodes пишет: я после invoke wsprintf добавил еще add esp, 12 неее, инвок - это не команда ассемблера, а макрос, который на основе прототипа функции формирует код, передающий параметры и, если нужно, выравнивает стек после вызова opcodes пишет: invoke wsprintf, addr buffer, addr format, digit в данном случае нужно бы написать Code:
так как digit у тебя определён как ячейка памяти со значением 10, передавать в функцию нужно непосредственно число, а у тебя передаётся адрес ячейки или определить его как Code:
OnLyOnE у него вопрос о сохранении ecx на время вызова wsprintf в каком-то цикле | Сообщение посчитали полезным: opcodes |
|
Создано: 10 июня 2012 15:57 · Личное сообщение · #9 Вот вопрос... ты на асме пытаешься, что-то писать? Если я правильно понял, то тебе проще создать свою функцию, объявив о ее параметрах вначале кода. Code:
----- aLL rIGHTS rEVERSED! | Сообщение посчитали полезным: opcodes |
|
Создано: 10 июня 2012 16:02 · Поправил: opcodes · Личное сообщение · #10 AkaBOSS, Спасибо! Работает.. А как на будущее узнать использует функция С конвенцию или нет? чтобы не задавать глупых вопросов впредь. OnlyOne, я еще новичок в нем, я понимаю что можно организовать еще миллион вариантов этой простой задачи. но пока пользуюсь тем функционалом, который мне проще понять. Но серовно приятно за помощь. |
|
Создано: 10 июня 2012 16:06 · Поправил: OnLyOnE · Личное сообщение · #11 |
|
Создано: 10 июня 2012 16:10 · Личное сообщение · #12 opcodes пишет: А как на будущее узнать использует функция С конвенцию или нет ну, как вариант, смотреть её определение в инклюде например, для wsprintf смотрим user32.inc: Code:
вот это самое PROTO C и есть определение C конвенции подробнее - masm32\help\masm32.chm - раздел Calling Conventions или у Зубкова глава 8.1 |
|
Создано: 10 июня 2012 22:13 · Личное сообщение · #13 |
eXeL@B —› Программирование —› loop & asm |
Эта тема закрыта. Ответы больше не принимаются. |