bilka00
bilka00
сам проэкт под нда
JeisonWi
MNDMA
bilka00
bilka00
вот сразу как проэкт сдам )
bilka00
и язву вылечу
IB
Eugene
/ban пидары тут не нужны.
Group Butler [beta]
H͚̓ü̺n̪̬̟ͣho͎̥͆wͧ banned Art!
Anonymous
Ned
может он на сторону ровных парней захотел?
Ned
а ты его взял и прогнал
Ned
да и что вообще за подход?
Ned
человек только зашёл, а ты его сразу в бан
И своего анального друга.
електр🟢нік ✙🟠рчбеч ඞ
bilka00
Руткит? :)
не малварь и не то что к ней относиться
bilka00
bilka00
везде есть единопроблемники
Eugene
Бля.... это пиздец!!!!!!
2 почти одинаковых кода. Читаю сектор через ReadFile.
Один код работает, другой – выдаёт ошибку (GetLastError=87 - неверный параметр). Весь код ДО этого места ОДИНАКОВЫЙ !!!
Да и ошибки не может быть никакой. Диск открывается успешно (так же, как и рабочем коде) и сразу же идёт ReadFile.
Запускаю на виртуалке – оба кода работают!!!! На компе – один работает, другой нет.
Наверное, час искал ошибку!!! Оказалось (ВНИМАНИЕ!!!) что в коде с ошибкой добавлена переменная, в результате чего буфер для чтения оказался НЕВЫРОВНЕННЫМ по 4-м (или сколько там ему нужно) байтам!!! Причём, код не на асме, а на ЯВУ (Delphi), где выравнивание по умолчанию стоит. Но так как там кое-где используется упокованная запись (несмотря на то, что эта запись потом ещё обёрнута в 2 record'а (структуры, короче)), варавнивание в этом место отключилось.
Eugene
Жесть какая-то!
Просто выговориться хотел :))
s54820
Eugene
Приму к сведению на будущее :))
Eugene
Не догадался
Lope Felix de Vega Carpio
Eugene
Ну там когда проблема с выравниванием есть же код у NTSTATUS'а
s54820
Eugene
А, ну тогда х/з
Vladimir
Бля.... это пиздец!!!!!!
2 почти одинаковых кода. Читаю сектор через ReadFile.
Один код работает, другой – выдаёт ошибку (GetLastError=87 - неверный параметр). Весь код ДО этого места ОДИНАКОВЫЙ !!!
Да и ошибки не может быть никакой. Диск открывается успешно (так же, как и рабочем коде) и сразу же идёт ReadFile.
Запускаю на виртуалке – оба кода работают!!!! На компе – один работает, другой нет.
Наверное, час искал ошибку!!! Оказалось (ВНИМАНИЕ!!!) что в коде с ошибкой добавлена переменная, в результате чего буфер для чтения оказался НЕВЫРОВНЕННЫМ по 4-м (или сколько там ему нужно) байтам!!! Причём, код не на асме, а на ЯВУ (Delphi), где выравнивание по умолчанию стоит. Но так как там кое-где используется упокованная запись (несмотря на то, что эта запись потом ещё обёрнута в 2 record'а (структуры, короче)), варавнивание в этом место отключилось.
Вроде процессорам x86 глубоко срать на выравнивание. За ним нужно следить чисто из соображений производительности.
Eugene
Есть бит выравнивания во флагах и cr0 (или cr-каком-то регистре). И я подозреваю, что в ядре он включен.
електр🟢нік ✙🟠рчбеч ඞ
bilka00
Бля.... это пиздец!!!!!!
2 почти одинаковых кода. Читаю сектор через ReadFile.
Один код работает, другой – выдаёт ошибку (GetLastError=87 - неверный параметр). Весь код ДО этого места ОДИНАКОВЫЙ !!!
Да и ошибки не может быть никакой. Диск открывается успешно (так же, как и рабочем коде) и сразу же идёт ReadFile.
Запускаю на виртуалке – оба кода работают!!!! На компе – один работает, другой нет.
Наверное, час искал ошибку!!! Оказалось (ВНИМАНИЕ!!!) что в коде с ошибкой добавлена переменная, в результате чего буфер для чтения оказался НЕВЫРОВНЕННЫМ по 4-м (или сколько там ему нужно) байтам!!! Причём, код не на асме, а на ЯВУ (Delphi), где выравнивание по умолчанию стоит. Но так как там кое-где используется упокованная запись (несмотря на то, что эта запись потом ещё обёрнута в 2 record'а (структуры, короче)), варавнивание в этом место отключилось.
Я бы в первую очередь написал логер который залогает все передаваемые данные и снимет дамп стэка и регистров в момент вызова read file
bilka00
И тогда уже отталкивался
bilka00
bilka00
Иногда винапи отказываеться работать если не выровнят стэк
Eugene
bilka00
bilka00
Даже в этом чате по этому поводу было обсуждение где то значительно выше
Eugene
А про какое выравнивание речь? 1, 2 байта вместо 4-х?
електр🟢нік ✙🟠рчбеч ඞ
😂
JeisonWi
Классный ник
Vyacheslav
Вопрос по MASM:
Pos PROTO, lpStr:DWORD, cbStr:DWORD, lpSubStr:DWORD, cbSubStr:DWORD
.CONST
szRequestSep DB 13,10,13,10
slRequestSep = $-szRequestSep
INVOKE Pos, EDI, EBX, OFFSET szRequestSep, slRequestSep
MASM 12.00.40629.0 ругается на последний аргумент error A2070:invalid instruction operands
MASM 6.14.8444 всё компилирует.
Если подставить вместо slRequestSep 4, то компилится.
Vyacheslav
Запилил issue. Посмотрю на реакцию https://github.com/slavanap/MASM_bug_demo
Ask
в инвоках аддр надо, не?
Vyacheslav
в инвоках аддр надо, не?
Не работает так ADDR. Тут константа. Если вместо slRequestSep подставить 4, то всё гуд
Ask
а.. недоглядел(
Ask
а если вместо = dd?
Ask
или equ заюзай
Vyacheslav
Vyacheslav
Но почему я должен память занимать под константу
Ask
тогда equ
Vyacheslav
Equ мало чем отличается от =
Vyacheslav
Ошибка с ним та же
Ask
попробуй)
Eugene
INVOKE Pos, EDI, EBX, OFFSET szRequestSep, sizeof szRequestSep
Vyacheslav
Eugene
А slRequestSep убрать
Ask
избавься от $, это текущий адрес, а у тебя дефайн, который неимеет адреса, соответственно он его посчитать не может, поэтому ошибка
Vyacheslav
Ask
хм, багу исправили?)
Vyacheslav
Вместо $ во время трансляции подставляется текущий адрес
Vyacheslav
Vyacheslav
Я попробую sizeof, как буду у компа
Vyacheslav
Ask
Eugene
Можно поподробней, как masm догадается про размер, если у меня несколько строк, начинающихся с db может быть?
Вот так догонит:
szRequestSep DB 'Hello World!',13,10,
'Good Bye!',13,10,
13,10,13,10
Ask
без следующей переменной имхо неопределит размер, но кто знает
Ask