Aiwan \ (•◡•) / _bot
👆 вот сюда ассуме вставляю\заменяю
Eugene
А, ну да, есть момент такой.
mov eax,[eax.hdr] выдаёт ошибку, но и mov edx,eax тоже
Eugene
Замени assume eax:none на purge eax
Eugene
@Aiwan, ну что молчишь, работает?
Aiwan \ (•◡•) / _bot
ща попробую, не видел сообщение
Aiwan \ (•◡•) / _bot
да, работает. так и оставлю
Eugene
Короче, purge ничего не меняет. Можно его убрать, будет то же самое.
И даже если оставить, всё равно можно к структура обращаться через eax.hdr...
Eugene
А вот assume eax:none запарывает всё.
Aiwan \ (•◡•) / _bot
мож ,с учетом того что у меня всего лишь 1 раз определяются виртуальные данные, оставить первоночальный вариант?
Eugene
Короче, вот так работает...
Определяешь 1 раз где-то вверху
struct none
dword dd ?
ends
потом пишешь
assume eax:none
Можно обратиться к [eax.dword], но это будет то же самое, что и [eax].
Собственно, dword можно заменить на что угодно, хоть на точку.
Eugene
К сожалению, совсем убрать эту строку нельзя (dword dd ?)...
Aiwan \ (•◡•) / _bot
Собственно, dword можно заменить на что угодно, хоть на точку.
это и есть в определении none
Aiwan \ (•◡•) / _bot
struc none { label . }
Eugene
Да, но там struc, а тут struct.
Eugene
Eugene
Пора бы Томашу переработать библиотеку макросов...
Eugene
Хм, я eax: пробовал, ничего не менялось. Как реагирует на:
mov eax,[eax.hdr]
?
s54820
Дмитрий
Eugene
Но я бы проверил в цикле в большом кол-ве потоков :)
На всякий случай.
Vyacheslav
bilka00
bilka00
В документации маек много не написано
Aiwan \ (•◡•) / _bot
#book макросредства языка MASM с wasm.in
Vyacheslav
Спорное утверждение
вполне логичное. Если они явно не промисали многопоточность, то потом могут что угодно про неё написать, в том числе и запретить её. Поэтому безопаснее всегда писать потокобезопасный код в тех случаях, когда не указана возможность обратного.
bilka00
bilka00
Так что чуточку моей подливки сверху не будут сильно мешать
bilka00
(А на деле я сделал потокобезопасно но в текущем случае не была важна скорость настолько что бы заморачиватся но для себя пометочку что так все работает сделал)
JeisonWi
Классный никнейм
ЧО?
А ты внимание на закреплённое сообщение обрати.
електр🟢нік ✙🟠рчбеч ඞ
0h-1fh зарезервированы
Eugene
Это в DOS'е только.
Eugene
Сишные функции доступны?
Vyacheslav
Тут по WinAPI вопросы задавать норм?
Кто-нибудь знает, как служба RDP сервера взаимодействует с ядром? В частности, как создаётся интерактивная сессия для пользователя? И можно ли эмулировать её создание?
Vyacheslav
Кстати, где последняя версия OllyDbg x64 лежит? Он ещё популярен?
Ask
kitsu
bilka00
Vyacheslav
JeisonWi
bilka00
Vyacheslav
JeisonWi
Вакансия на какую-то малварную позицию, не помню.
bilka00
Я не это спрашивал.
Ну ало оля дефакто устарела. x64dbg отличная альтернатива. Тут и олиподобный язык для скриптинга и питон для этих же целей. А сам отладчик уже достаточно стабильный, достаточная база плагинов
JeisonWi
bilka00
И отзывчивые разрабы
Если его не посадят)) то да, комьюнити отладчика часто помогает решать вопросы сложные
Eugene
В телеге есть чат по x64dbg с разрабами.
А Оля 64 же так и не вышла, разве нет?
bilka00
Aiwan \ (•◡•) / _bot
кто нить бачит в макросах fasm???
include 'win32ax.inc'
struc db [data]
{
common
. db data
.size = $ - .
}
macro GetSize data
{
common
local sz
if data in <al,ah,bl,bh,cl,ch,dl,dh>
sz=1
display sz+48
mov al,data
cbw
cwde
;mov [dwNum],eax
else if data in <ax,bx,cx,dx,si,di,sp,bp>
sz=2
display sz+48
mov ax,data
cwde
else if data in <eax,ebx,ecx,edx,esi,edi,esp,ebp>
sz=4
display sz+48
mov eax,data
else ;if data eqtype [0]
sz=data.size ;выдает ошибку
display sz+48
mov eax,data.size
end if
}
.data
fff db 3
db 12
ddd db 'abcdef',0
.code
start:
GetSize fff
;mov eax,ddd.size ;если size использовать вне макроса - ошибки нет
invoke ExitProcess,0
.end start
цель сделать макрос который по параметру определяет его размер. для регистров все понятно, а вот как сделать если использовать значение памяти или значение по адресу в памяти???
Eugene
кто нить бачит в макросах fasm???
include 'win32ax.inc'
struc db [data]
{
common
. db data
.size = $ - .
}
macro GetSize data
{
common
local sz
if data in <al,ah,bl,bh,cl,ch,dl,dh>
sz=1
display sz+48
mov al,data
cbw
cwde
;mov [dwNum],eax
else if data in <ax,bx,cx,dx,si,di,sp,bp>
sz=2
display sz+48
mov ax,data
cwde
else if data in <eax,ebx,ecx,edx,esi,edi,esp,ebp>
sz=4
display sz+48
mov eax,data
else ;if data eqtype [0]
sz=data.size ;выдает ошибку
display sz+48
mov eax,data.size
end if
}
.data
fff db 3
db 12
ddd db 'abcdef',0
.code
start:
GetSize fff
;mov eax,ddd.size ;если size использовать вне макроса - ошибки нет
invoke ExitProcess,0
.end start
цель сделать макрос который по параметру определяет его размер. для регистров все понятно, а вот как сделать если использовать значение памяти или значение по адресу в памяти???
Нет такого. Только парсить 😩
https://board.flatassembler.net/topic.php?t=20642
Eugene
Ну если только ты не придумаешь что-нибудь через virtual, хотя в голову ничего конкретного не приходит.
Eugene
Можно ещё определить макросы-аналоги db, dw, rb, rw... и там создавать имя label.size.
Но это костяли опять же. Но если чисто для себя, то можно как вариант, если уж очень надо.
Aiwan \ (•◡•) / _bot
от части решил этот вопрос
else if data eqtype byte[0]
...
GetSize byte [fff]
Aiwan \ (•◡•) / _bot
сам макрос это прилюдия к общему макросу
Aiwan \ (•◡•) / _bot
проверка делается на сам размер в параметре в вызове на ячейку памяти
Aiwan \ (•◡•) / _bot
и еще подсказали
Aiwan \ (•◡•) / _bot
Может уже ответили, но sz=data.size ;выдает ошибку внутри макроса должно быть sz=data#.size, тогда препроцессор сможет подставить вместо data параметр макроса, и всё заработает.
Eugene
А, у тебя параметр - это элемент структуры?
Aiwan \ (•◡•) / _bot
нет
Aiwan \ (•◡•) / _bot
точнее не всегда
Aiwan \ (•◡•) / _bot
может быть как и регистр так и участок памяти
Aiwan \ (•◡•) / _bot
но в любом случае есть идея все по другому сделать, без этих size
Aiwan \ (•◡•) / _bot
macro PrintDec data,[size]
{
if size eq
if data in <al,ah,bl,bh,cl,ch,dl,dh>
display "регистр 1 байт"
mov al,data
else if data in <ax,bx,cx,dx,si,di,sp,bp>
display "регистр 2 байта""
mov ax,data
else if data in <eax,ebx,ecx,edx,esi,edi,esp,ebp>
display "регистр 4 байта"
mov eax,data
end if
else
if data eqtype [0] & size eq BYTE
display "ячейка памяти 1 байт"
movsx eax, byte data
movzx ebx, byte data
else if data eqtype [0] & size eq WORD
display "ячейка памяти 2 байт"
movsx eax,word data
movzx ebx,word data
else if data eqtype [0] & size eq DWORD
display "ячейка памяти 4 байт"
mov eax,dword data
mov ebx,dword data
end if
end if
}
.data
fff db -3,9
db 12
ddd db 'abcdef',0
.code
start:
PrintDec [fff],word
вот так все работает
Serhii
Ребят где можно скачать visual masm а то оф сайт не работает
Aiwan \ (•◡•) / _bot
она глучная если что
Aiwan \ (•◡•) / _bot
вот, месяца два назад скачивал
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
или...
Serhii
Все я на git нашел странно что у них с офф сайтом
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
An optimization guide for assembly programmers and compiler makers (2018)
Aiwan \ (•◡•) / _bot
Eugene
#book
Что, лучше Агнера? :)
Aiwan \ (•◡•) / _bot
Screenshot (14 февр. 2019 г. 18:09:06)
Eugene
А, ну тогда
xk8.ru/agneroptasm
xk8.ru/agneroptcpp