George
Anonymous
Понял спасибо
Aiwan \ (•◡•) / _bot
George
... по адресу
mov rax,qword ptr [rax] квадратные скобки — это указатель qword ptr — это quad word pointer, указывает на размерность указателя всё это можно свести к более простой форме: mov rax, [rax]
George
внимательно перечитай мой комментарий и увидишь слово POINTER
Aiwan \ (•◡•) / _bot
указывает на не размерность укащателя, а на размерность данных которые ты берешь. вроде так должно быть. mov ax, word ptr[rax] попробуй это
George
Давай всё-таки вернёмся к твоему первому замечанию )
George
Про адрес
George
Слово pointer это указатель или адрес?
George
В твоём понимании
George
По смыслу: Явным образом указывать размерность нужно только в том случае, если размерности источника и получателя не совпадают
George
В остальных случаях, когда мы пишем word ptr (как в твоём корректном примере), это означает, что мы в регистр назначения пишем данные другой размеренности, которые получаем по указателю (в квадратных скобках)
Aiwan \ (•◡•) / _bot
Слово pointer это указатель или адрес?
перевод верный. но я то про смысл сего действия говорю, а не про перевод.
Aiwan \ (•◡•) / _bot
просто это слово "указатель" можно явно перепутать с типом пеменной из си, где указатель на память занимает место в памяти, в асме тоже можно создать переменную и называть ее указателем, в которой будет храниться адрес. поэтому я разделяю эти понятия.
Eugene
Если мы переключились в 32-битный Unreal Mode и возникает IRQ или мы вызываем INT, то код переключается на время обработки прерывания в 16-битный режим что ли? Ковыряю Kelvar (by Tomasz Grysztar), там 32-битный код перемешан с int'ами (10h, 21h, 33h...), и никаких предварительных ласк там нет.
Eugene
В смысле нет? source/system/irq.inc, первые несколько строк.
Предварительных - это перед int 21h, к примеру. А первые несколько строк - это как раз переход в 32-битный режим кода в начале обработчика IRQ и возврат в 16-битный в конце.
Eugene
Код int 21h очевидно 16-битный. Если мы делаем вызов из 32-битного кода, то он будет работать только при переключении обратно в 16, иначе никак.
disba1ancer
Если мы переключились в 32-битный Unreal Mode и возникает IRQ или мы вызываем INT, то код переключается на время обработки прерывания в 16-битный режим что ли? Ковыряю Kelvar (by Tomasz Grysztar), там 32-битный код перемешан с int'ами (10h, 21h, 33h...), и никаких предварительных ласк там нет.
раз дали доступ продублирую тут что вложенно в понятие "32ух битный unreal mode"? емнип, для вызова обычных прерываний под unreal mode ничего не надо, всё также как и в real mode, но есть нюансы
disba1ancer
call init_error db 'processor is not able to enter 32-bit real mode',0 прикольный трюк, можно передавать передавать текст без регистров, но с этим надо аккуратно...
disba1ancer
disba1ancer
правда я не пойму есть ли какой смысл в 32ух битном анриле кроме избавления от префиксов
Eugene
Так он же так перед смертью только, он возвращаться не собирается.
Ну там вообще нет проблем сделать типа такого: pop esi jmp load .print: int 29h .load: lodsb test al,al jnz .print jmp esi ; вместо ret
s54820
Можно, да. Но как-то чересчур уже, тогда уж проще вот это стандартное call @f ... db ... @@: call func.
disba1ancer
Можно, да. Но как-то чересчур уже, тогда уж проще вот это стандартное call @f ... db ... @@: call func.
когда считаешь не только регистры, но и размеры инструкций и их количество
Eugene
правда я не пойму есть ли какой смысл в 32ух битном анриле кроме избавления от префиксов
Х/з, мне тоже не совсем ясен смысл. Ну да, прикольно, экономия на префиксах (особенно когда читаешь 32 бита по 32-битному указателю), зато столько дополнительного кода (с теми же прерываниями гемор).
Anonymous
А можно вкрации для слабослышащих резюме по прерываниям в анрил моде? Что там в итоге получается?
Anonymous
Тред очень длинный а я хлебушек
Eugene
А можно вкрации для слабослышащих резюме по прерываниям в анрил моде? Что там в итоге получается?
Для каждого прерывания создаётся предварительный код, который делает перевод в 16-битный режим, вызов обработчика и затем возврат в 32-битный. И таблица прерываний перенаправляется на этот код. Вот такая канитель.
Anonymous
Благодарю!
Eugene
Вкрацее уже не получится.
Ruslan
ЧЯДНТ? IDA Pro 7.5 При поиске по последовательности байт, пишет Search failed. Command "AskBinaryText" failed Сталкивался ктонибудь?
Ruslan
Техподдержка что говорит? Файлы не повреждены?
Если я открою этот файл в хексе то всё найдется
Ruslan
Техподдержка что говорит? Файлы не повреждены?
> Техподдержка говорит что у вас нету 2k$))
­
> Техподдержка говорит что у вас нету 2k$))
И удивляются, почему что-то в пиратке не работает...
­
Если я открою этот файл в хексе то всё найдется
А ищешь как? 00 00 00 00 Или сплошняком?
Ruslan
И удивляются, почему что-то в пиратке не работает...
интересно, если бы это было бы по этой причине то обсуждалось бы а так вообще никто не упомниает
Ruslan
в демо версии нет ограничений на поиск? всё что мне нужно - найти строчку и посмотреть кто на нее смотрит
­
и так и так пробовал
https://reverseengineering.stackexchange.com/questions/25903/cant-find-sequence-of-bytes-in-ida-while-debugging
George
и так и так пробовал
Попробуй изменить порядок байт
Ruslan
Попробуй изменить порядок байт
Разобрался это просто такой верх "информативности" чтобы не гадать взял то что реально есть (Hex-View) вбил - нашло, изменил - пишет такойже Failed короче говоря, это типо не найдено, а не крах
George
Разобрался это просто такой верх "информативности" чтобы не гадать взял то что реально есть (Hex-View) вбил - нашло, изменил - пишет такойже Failed короче говоря, это типо не найдено, а не крах
В официальной документации по AskBinaryText вообще ничего не сказано о возвращаемом значении. Видимо, IDA автоматически и универсально интерпретирует возвращаемое функцией значение, не учитывая контекст. И похоже на то, что нулевой результат функции IDA интерпретирует как "Функция вернула ошибку" вместо "не найдено".
Ruslan
Из категории "сами догадаются" или "путь через шишку")) Ок, почему я не нахожу то что находил через хекс вне IDA? порядок байт менял
George
Причин может быть несколько: - сегмент не был загружен идой - данные в иде не были распознаны или наоборот были распознаны как другой тип данных, по которому ида по какой-то причине не ищет - при конвертации из little endian в big endian и обратно возникает ошибка - ты захватываешь "половину байта" (вместо 00 AA BB CC DD указываешь 0A AB BC CD)
Ruslan
тоесть в конце не манифест итп а данные
George
первое очень вероятно т.к. строчка в конце файла приаттачена
Тогда при загрузке файла в иду явным образом укажи диапазон
George
Ида обычно дропает всё, что не код, и всё, что явным образом не связано с кодом. Таким образом, ида может дропнуть секцию, если у тебя секция не содержит точки входа, не помечена как исполняемая, не содержит TLS (в случае с виндовым PE), не содержит импорта (и то импорт может быть прочитан строками и выгружен) и т.п.
Ruslan
Тогда при загрузке файла в иду явным образом укажи диапазон
нашел, да, оно и правда отбрасывает оверлей и прочие
Ruslan
судя по всему раз оно отбросило и ссылки статикой я не найду
George
нашел, да, оно и правда отбрасывает оверлей и прочие
оверлей вообще за пределами SizeOfImage, так что его ида грузит только если ей указать диапазон, включающий оверлей
Ruslan
я просто ищу место в котором записано смещение спасибо за уточнение про SizeOfImage есть ли инструменты которые могут перебором найти возможные ссылки тоесть берем начало смещения 1) ищем само смещение в разных представляениях далее поиск возможных относительных значений 2) ищем но отнимаем длину хедера 3) длину каждой секции итд...
George
hiew
George
но оверлей программно ищется иначе
George
пробег по всем секциям, получение и выравнивание указателей на сырые данные, выравнивание и прибавление размера данных, а потом находим максимальное из полученных значений, сравниваем его с размером файла, дельта — положительный результат — это размер оверлея после чего проверяем директорию сертификатов и вычитаем её размер
Ruslan
hiew
что случилось с официальным сайтом?)) по веб архиву - еще 7го числа был доступен)
Ruslan
пробег по всем секциям, получение и выравнивание указателей на сырые данные, выравнивание и прибавление размера данных, а потом находим максимальное из полученных значений, сравниваем его с размером файла, дельта — положительный результат — это размер оверлея после чего проверяем директорию сертификатов и вычитаем её размер
у меня по этой части имеются пробелы в знаниях)) если не затруднит - скиньте материалов по теме ну а так то буду гуглить если быть точным, затрудняюсь в этих моментах: > получение и выравнивание указателей на сырые данные как получить размер оверлея - думаю разберусь, а вот > после чего проверяем директорию сертификатов и вычитаем её размер это чтото новое для меня это оно?
Ruslan
Ruslan
и что оно мне даст
George
это TLS, а не сертификаты
Ruslan
больше ничего подходящего под сертификаты не вижу
George
С питоном знаком? Если знаком, то можешь поиграться с этим модулем:
Ruslan
аа, вспомнил про выравнивание это просто забивка чтоб "четко" было т.е. фиксированная длина
George
pefile is a Python module to read and work with PE (Portable Executable) files