Wt 18 некорректный расчёт

This commit is contained in:
Стас Михайлов WindowsDesktop
2021-08-08 21:03:06 +03:00
parent 80a635688c
commit 2d4c85548a
9 changed files with 329 additions and 50 deletions
+19 -2
View File
@@ -1,2 +1,19 @@
После подключения DLL вызывающая прогамма ловит исключение через 20-30 секунд (в дебагере - сразу). Похоже, глюк в адресации. Проверить возвращаемые значения.
Проблема оказалась в том, что в wndproc переменные я хранил локально, что давало исключене после вызова DLL
в секции .data глюк: несколько массивов (DUP) находятся под разными метками, но имеют один адрес в дебагере
Конкретно: k_konst и sha_hash
Решилось: неправильно использовал оператор DUP: Надо сначала писать сколько, а в скобках (чего). 10 dup (0), а я писал наоборот
Остановился на деление по модулю. Нужно разделить весь объём на величину отрезка. Пока исключение, видимо потому, что 64-битные регистры использую.
Решено: не обнулял rdx. Деление происходит не одного rax, а пары rdx:rax. Вылетало по переполнению.
Разобраться с прологом и эпилогом. Сейчас их нет и обращение идёт по недопустимому адресу т.к. в rbp ноль.
Решено: пролог и эпилог подставляются автоматически, если установить опции:
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef
Кстати, enter - везде пишут, что он тормозной и лучше использовать push ebp; mov ebp,esp. А sub esp,nnn нужен, чтобы вызываемая процедура могла делать push
и не перезаписывать при этом локальные переменные.
Написать в Excel скрипт, который в зависимости от i, даёт имя регистра в котором есть i-15, i-2 и i-16, выдавая при этом порядок байт, при котором команда pshufd выдвинет
искомое слово на младшие 32 бита XMM регистра
- Сделано
Закончил расчёт w16, считает павильно. Но пока не получилось правильно сохранить в XMM4