R
Здравствуйте!
R
Кто юзает sasm?
R
помогите пожалуйста, через sasm тупо ниче не компилится, хотя этот же файл фасмом через командную строку спокойно компилится
R
кто юзает fasm и sasm помогите какие настройки надо выставить?
Anonymous
Я фасм в powershell использую а не в ide
R
короче я указал путь в настройках к нормальному фасму а не к дефолтному
Anonymous
И?
R
теперь компилится но gdb не рабоает
R
хм теперь с gdb разбираться
Anonymous
Используй x64dbg
Anonymous
Или windbg
R
ok
Anonymous
struc TSS { .limit dw 0x100 .adrlow dw ? .adrcenter db ? .conffield1 db ? .conffield2 db ? .adrhigh db ? } set_task: virtual at esi .esi TSS end virtual test bl,bl jnz .user .kernel: mov byte [esi.conffield1],10001001b .user: mov byte [esi.conffield1],11101001b .continue: mov word [esi.adrlow],dx shr edx,16 mov byte [esi.adrcenter],dl mov byte [esi.conffield2],10000000b shr dx,8 mov byte [esi.adrhigh],dl retn
Anonymous
пишет ошибку вот такую
Anonymous
mov byte [esi.conffield1],10001001b processed: mov byte[esi.conffield1],10001001b error: undefined symbol 'esi.conffield1'.
Anonymous
не понимаю почему структура находится наверху я не использовал с virtual не разу esi
Anonymous
да даже если использовал можно переопределить
Anonymous
есть какие то идеи?
Anonymous
все равно ваш совет не рабочий ругается fasm
Aiwan \ (•◡•) / _bot
вот для образца
Anonymous
ага спасибо )
Aiwan \ (•◡•) / _bot
с virtual очень удобно работать с массивом структур. если же у тебя в памяти просто 1 структура лежит то лучше наверное (тут дело вкуса) [esi+nбайт]
Aiwan \ (•◡•) / _bot
хотя для понятности кода можно и virtual
Eugene
все равно ваш совет не рабочий ругается fasm
Странно, у меня не ругается :)
R
привет это что за соглашение о вызове использует функция?
R
В одной статье вот это компильнули клангом и получили то что на фотке выше.. // Compile me with: clang -c mul.c -o mul.o int mul (int a, int b) { return a * b; }
Anonymous
си соглашение
R
это не _cdecl точно
R
но не знаю что
kitsu
вообще выглядит как обычный system v abi, только почему-то на 32 битах
R
вообще выглядит как обычный system v abi, только почему-то на 32 битах
почему тогда параметры передаются не через стек, а в esi edi кладутся? Ну в данном примере
kitsu
в sys v параметры и идут через регистры
R
аа понял спасибо. Оказывается на 32 битном систем в аби параметры по стеку идут а в 64 битном по регистрам сначала
Eugene
В 64-битном одно соглашение (для каждой ОС). Это в 32-битном их вагон.
kitsu
ну и вообще кажется winapi на cdecl сидит, хотя либы в ms линкуются по другому соглашению
Eugene
windows + wsl?
Что windows + wsl ?
kitsu
Что windows + wsl ?
Это ведь одна ось, а abi линуксовое и виндовое
Anonymous
https://j00ru.vexillium.org/syscalls/win32k/64/
Anonymous
https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FProcess%2FNtTerminateProcess.html
Anonymous
вопрос такой как использовать sysenter куда класть в eax или в stack
Anonymous
в плане использовать функции ядра
Vladimir
в плане использовать функции ядра
Для 32-бит? Да точно так же, как и int 80h
Anonymous
а какие параметры
Anonymous
куд акласть
Anonymous
куда класть*
Vladimir
eax - номер сист. вызова, ebx, ecx, edx, esi, edi, ebp - параметры, ЕМНИП.
Anonymous
у меня ошибка
Anonymous
выходит о том что я не могу использовать
Anonymous
mov ax,0x0024 sysenter
Anonymous
0x0024 это NtTerminateProcess
Vladimir
0x0024 это NtTerminateProcess
Про NT не в курсе, я linux имел в виду
Anonymous
да линукс это легко
Vladimir
В NT там же вроде сам чëрт ногу сломит в плане сисколлов
Vladimir
От версии зависит, даже от ревизии. Я в своë время ковырялся, потом плюнул
Eugene
Писал я как-то статью про int 80h, sysenter, syscall в Linux. https://www.cyberforum.ru/blogs/521524/blog5351.html И даже include-ники в комплекте.
Eugene
А в винде — гуглить надо. Как в eax кажется номер, а дальше через стек вроде.
Eugene
https://www.securitylab.ru/analytics/241543.php eax = номер функции edx = esp адрес возврата — в стек, ибо sysenter его не сохраняет никуда параметры — в стеке.
Eugene
А msr что, меньше? Читай Intel SDM, там по любому всё написано.
Anonymous
я посмотрел так и у меня вопрос вот фрагмент кода
Anonymous
https://pastebin.com/TjP1jKcy
Anonymous
и когда я ставлю не правильный esp (не тот который я в начале выставил) и записываю в msr IA_SYSENTER_ESP то при прыжке в 3 кольцо у меня не правильные селекторы в cs и в ss почему ?
Anonymous
когда я ставлю правильный esp то cs и ss имеют правильные дескрипторы почему ?
Anonymous
в этом фрагменте кода все правильно
Anonymous
...
Anonymous
при прыжке в ring 3 когда происходит первый sysexit у меня загружаются не те селекторы в видимую часть cs ss вот код : https://pastebin.com/6ifRW2jU
Eugene
Всё то загружается, там 3 в младших двух битах задаёт кольцо, как раз sysexit туда 3 и пишет.
R
Здравствуйте, можете объяснить чем отличается резервирование (rb rd и тд) от определения (db dd и тд)? гуглил но не понял
Aiwan \ (•◡•) / _bot
rb резервирует место в памяти во время загрузки программы, резервируемая память не заносится в бинарник (только инфа о том сколько надо выделить). db определяет байты в бинарнике, и этот объем потом переносится в память. можешь поэесперементировать, rb 1000000, а потом измени на db 1000000, обрати внимание на объем бинарника
Aiwan \ (•◡•) / _bot
в обоих случаях программе будет доступен этот размер памяти
s54820
rb резервирует место в памяти во время загрузки программы, резервируемая память не заносится в бинарник (только инфа о том сколько надо выделить). db определяет байты в бинарнике, и этот объем потом переносится в память. можешь поэесперементировать, rb 1000000, а потом измени на db 1000000, обрати внимание на объем бинарника
Заносится ли резервируемая память в бинарник, сильно зависит от формата. В целом, экономия будет, только если rb стоит в конце файла/сегмента/секции. Если после rb идут данные, то rb NUM превратится в что-нибудь типа db NUM dup 0.