Ask
че за таблица разделов в пе файле?
Anonymous
Ask
где конкретно написано что перед таблицей секций байты левые могут быть
Eugene
Eugene
И выдержку, где написано, что section table идёт сразу после заголовков.
Anonymous
Anonymous
Сейчас пришлю настоящую ссыль
Anonymous
Ask
Anonymous
страница 62
Ask
нам искать и качать эту книгу?
Anonymous
#book
https://konyakov.ru/pubs/books/kris-kaspersky-r_i_p/kris-kaspersky-15.pdf
Ask
и че не так? написано что у кого кривые руки неправильно высчитывают начало таблицы секции
JeisonWi
Советую вместо чтения этого взять примеры и слайды от Ange Albertini (corkami)
JeisonWi
Он лет 10(?) назад создал хороший наборчик
JeisonWi
https://github.com/corkami/pocs/tree/master/PE
JeisonWi
https://github.com/corkami/pics/tree/master/binary/pe101
Anonymous
0neAn0ther
Да, Крис Каспреский четкий был спец. Мало таких. Жаль что безвременно ушел.
Anonymous
Есть ли хорошее описание import table кроме MSDN ?
Eugene
Загугли. Такая инфа должна находиться элементарно.
Eugene
Подскажите, как указать в асм-вставке GCC, что входной регистр изменяется?
Грубо говоря,
asm volatile(
"cld\n\t"
"rep movsl\n\t"
:
: "S"(src), "D"(dst), "c"(count)
);
Я не могу прописать "esi", "edi", "ecx" в списке clobbers, что делать-то?
Eugene
И ещё вопрос: как указать метку, которая используется внутри asm-вставки?
Скажем,
asm(
"test %eax, %eax\n\t"
"jz zero\n\t"
"inc %eax\n\t"
"zero:\n\t"
);
Сделать вот эту zero уникальной. Чтоб не случилось так, что метка с таким же именем объявлена где-то ещё.
Eugene
В доке пишут, что нет способа указать, что входной регистр изменяется, если не указать его в списке выходных параметров.
Но что мне там указывать? Я же не могу написать в списке выходных параметров просто "S", "D", "c" без скобок.
А указывать во входных просто "r" и в асме писать mov %0, %%esi и т.д. — это тоже как-то тупо (лишние пересылки туда-сюда, и кстати, не факт, что получится, может тупо не хватить регистров, если их будет больше, чем 3).
Можно сохранить и восстановить эти регистры (push/pop) внутри асм-вставки, но это тоже лишние танцы с бубном.
Тут ещё один вопрос рождается: если я указал в clobbers callee-save регистры, мне же не нужно их сохранять/восстанавливать, верно (точнее говоря, я надеюсь), компилятор сделает это сам?
Vladimir
В доке пишут, что нет способа указать, что входной регистр изменяется, если не указать его в списке выходных параметров.
Но что мне там указывать? Я же не могу написать в списке выходных параметров просто "S", "D", "c" без скобок.
А указывать во входных просто "r" и в асме писать mov %0, %%esi и т.д. — это тоже как-то тупо (лишние пересылки туда-сюда, и кстати, не факт, что получится, может тупо не хватить регистров, если их будет больше, чем 3).
Можно сохранить и восстановить эти регистры (push/pop) внутри асм-вставки, но это тоже лишние танцы с бубном.
Тут ещё один вопрос рождается: если я указал в clobbers callee-save регистры, мне же не нужно их сохранять/восстанавливать, верно (точнее говоря, я надеюсь), компилятор сделает это сам?
Обьяви фиктивную переменную и привяжи к ней регистр как выходной параметр
Vladimir
Anonymous
только что сделал если кому надо берите )
Anonymous
а я вручную делал под fasm
Aiwan \ (•◡•) / _bot
а чего тогда не полностью? было бы замечательно
bilka00
а разве в фасме нет этих инклудов?
Aiwan \ (•◡•) / _bot
с этими структурами вроде нет. там по библиотекам идет все
Aiwan \ (•◡•) / _bot
Anonymous
я буду дополнять этот файл
bilka00
ух, надо будет собрать все в кучу
bilka00
а то я по привычке играю в посчитай байты для смещения
Anonymous
хехе
Vladimir
Vladimir
Это же просто директива, говорящая компилятору, что состояние регтстра меняется
Eugene
Ну да, они удаляются (уже при -O1, остаются только при -O0).
Eugene
Но я надеялся, что есть более красивый выход. Может, модификаторы какие-то.
Eugene
Спасибо за идею (хотя ведь думал же об этом, но не стал даже пробовать).
Eugene
Anonymous
visual studio compiler в чем ошибка?
__asm
{
push ax
push edi
push ecx
lahf
cld
xor al, al
mov edi, dword ptr [Address];
mov ecx, dword ptr [size];
rep stosb
sahf
pop ecx
pop edi
pop ax
}
Anonymous
он ругается на mov ecx,dword ptr [size]
Anonymous
не понимаю просто
Anonymous
error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "второй операнд"; обнаружено "]
Anonymous
точки запятые я убирал тоже ругается делал так mov ecx,[size] тоже ругается
Anonymous
может я так даже подумал mov ecx,size но тоже ругается
Eugene
Что такое size, как он объявлен?
Anonymous
DWORD Size = POINTER_PE_SECTION_TABLE->SizeOfRawData;
DWORD Address = POINTER_PE_SECTION_TABLE->Misc.PhysicalAddress;
Eugene
А, ну size — это зарезервированное слово, скорее всего. Переименуй.
Eugene
Или нет, разный регистр первой буквы.
Eugene
Сначала с заглавной напиши попробуй.
Anonymous
тоже пробовал ругается
Eugene
Что именно пробовал?
Anonymous
переименовать в заглавные
Eugene
[Size] с заглавной?
Anonymous
да
Eugene
Тогда поменяй имя вообще.
Anonymous
yes)
Anonymous
спасибо) видимо size это да
Anonymous
prefetch не очень понял что именно в кеш загружает опкоды операндов ?
Anonymous
https://www.felixcloutier.com/x86/prefetchh
Eugene
Почему опкоды-то?
Загружает кэш линию данными из памяти.
Eugene
Если ты знаешь, что будешь читать эти данные позже, можешь заранее загрузить в кэш данные.
Eugene
Правда, во многих случаях спекулятивная выборка сделает это за тебя. Но иногда загрузка вручную помогает.
Anonymous
а почему тогда загружается один байт
Anonymous
используется m8
Anonymous
я не ошибаюсь размер кеша в x86 это 64 байта да ?
Eugene
Не кэша, а линии.
Eugene
используется m8
Спросите у Intel'а :)
Этот размер не имеет значения. Мы просто указываем нужный нам байт, а грузится всё равно целая линия. Везде при работе с кэшем указывается адресация m8 (clflush[opt], cldemote, clwb, prefetch*).
Плюс размер линии не фиксирован теоретически, его можно определить через cpuid, например. Практически же он всегда (ну или почти всегда) = 64 байтам на x86.
Eugene
; Get cache line size in EAX
proc GetCacheLineSize
push ebx
mov eax,80000000h
cpuid ; get max ext. leaf level (EAX)
mov ecx,80000006h
cmp eax,ecx
jb @F
mov eax,ecx
cpuid ; cache size = ECX [0..7]
movzx eax,cl
jmp .ok
@@:
mov eax,1
cpuid ; cache size for CLFLUSH = EBX [8..15] * 8
movzx eax,bh
shl eax,3
.ok:
pop ebx
ret
endp
Anonymous
спасибо)
Marsel
есть ли какая программа или утилита чтобы узнать точный размер файла до бита???