![]() |
|
![]() ![]() ![]() |
|
race1 |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
Привет!
Пытаюсь вызвать ф-ю GetTextExtentPoint32 и получаю ошибку.
Вариант номер один:
Компилируется нормально, но видимо происходит Access Violation, в итоге последующий invoke ничего не рисует (OllyDbg пишет в статусной строке AV когда F8 строку invoke GetTextExtentPoint32 ... Вариант номер два:
Получаю ошибку при компиляции: error A2133: register value overwritten by INVOKE Ну в общем много вариантов перепробовал, потому что не уверен как правильно ![]()
работает как надо. Структуры SIZE и POINT одинаковы, и там и там два LONG. Помогите пожалуйста, что здесь не так. |
||||||||
|
|||||||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
race1, второй аргумент GetTextExtentPoint32 адрес строки, третий аргумент количество символов в строке (видимо ссылаться нужно на строку s) тоже самое будет с TextOut, dc, 10, 10, "kva", 3 -- ассемблер это не С, которая расположит "kva" в локальном буфере, а потом удалит его, здесь всё делается ручками
![]() IMHO нужно так invoke GetTextExtentPoint32, dc, offset s, length(s), addr textWidth Это сообщение отредактировал(а) Mikl_ - 25.11.2008, 12:44 |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
необходимо избегать применения макросов в параметрах invoke, так как они(макросы) используют для возврата значения регистр eax, и в результате получается "борьба" за этот регистр.
и если при использовании ADDR(встроенный макрос) компилятор отслеживает "незаконные" изменения eax и ругается(error A2133), то в случае ptr$ все происходит с "тихой сапой": например в твоем случае, вследствие выноса вызовов функций "наверх", получается:
как результат: GetTextExtentPoint32 пытается прочитать слишком много(например 12FFF0) из sptr - AV. |
|||
|
||||
race1 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 18.6.2004 Репутация: нет Всего: нет |
О, да! То что надо! ![]()
и заработало! Спасибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |