Pull to refresh
5
0
awoland @awoland

Пользователь

Send message

Долина Кремниевая, там полупроводники производят (они являются по сути кусками кремния). Если безграмотным англоязычным ещё можно простить (у них эти 2 слова отличаются всего на 1 букву при написании, и ещё меньше при произношении), то на русскоязычном ресурсе - нет 🤷‍♂️

Нужно не зубрить, а знать этимологию.
Часть предмета:
"on the picture" - не правильно, но "dust on the picture" - правильно
"in the picture" - правильно
"on the photo" - не правильно, но "the autograph on the photo" - правильно
"in the photo" - правильно
Нанесено на поверхность:
"on the postcard" - правильно
"in the postcard" - не правильно
"on the sheet" - правильно
"in the sheet" - не правильно

Есть, можно по ALT+Q назначать структуры в памяти. Если сами типы данных, то по Y — в декомпиле, по T — дизасме. Да, тоже часто пользовался при разборе контроллеров, когда есть UART, например, с пачкой регистров и таких UART'ов несколько штук. Делаю структуру с регистрами и назначаю на разные базовые адреса UART'ов. Аналогично для любой другой периферии.

Еще я очень оценил в Гидре возможность назначения структур для адресов памяти и енумов для констант. Очень помогает при разборе кода микроконтроллеров с их регистрами :) Это, может быть, есть и в ИДА, просто я не добрался там до такой возможности…
Как пример — http://prntscr.com/rmcygm
По поводу патчинга у IDA есть такая функциональность — она касается пропатчить последовательность байт и при этом IDA даже сохранит у себя в базе все места патчинга.

Ну и Гидра тоже не изменяет исходный бинарник, а вносит в базу информацию об изменениях и экспортирует с учетом этих изменений.
А как в ИДА менять код в командах ассемблера? Вот мне нужно все вызовы определенной функции изменить на вызов своей процедуры. В Гидре я открываю список обращений к исходной функции и переходя по каждому найденному адресу прямо в окне ассемблера меняю, скажем «bl TFT_WriteCommand» на «bl MyTFT_WriteCommand». Потом «File -> Export...» и у меня готов пропатченный бинарник. А в ИДА?

Так тоже можно сделать в ИДА, но только для x86/x64. Для других зависит от процессорного модуля, если он не поддерживает ассемблирование команд — то нельзя (для АРМа точно нельзя). Ни в коем случае не хочу сказать, что "ну раз нет ну и не надо", но сам очень опасливо к этому отношусь. Когда так патчишь бинарь команда может получиться короче-длиннее и потом это откатывать отдельная песня, когда нет CTRL+Z :). И вторая причина — если не обратить внимание можно зашить не совсем правильный патч и плясать после этого долгое время. То есть это добавляет еще одну "степень свободы" в куче неизвестных. Но это чисто мое мнение. Возможно это историческая профдеформация.

mov ss, xxx; mov sp, xxx+2; jmp yyy — "Вьетнамский флешбеки". В биосах такое очень любят, сам касался тоже Award BIOS, но очень давно.


Однажды вообще встретил прошивку, в которой она вся была выстроена на основе таких "вызовах" функций и была для процессора C166. Пришлось писать свой процессорный модуль, который собирал такие конструкции в "псевдо-вызов" CALL.

F5 — действительно знаменитая кнопка, но сейчас я бы сказал более популярен TAB. В отличие от F5, кнопка TAB не только формирует псевдокод (хотя я бы сказал сейчас IDA реально декомпилирует в Си), но и синхронизирует указатель в окне псевдокода и окне дизассемблера. То есть нажав на TAB у Вас указатель в окне псевдокода будет на том месте, которое соответствует месту, где указатель был в листинге ассемблера, и наоборот. Это намного удобней.

По поводу патчинга у IDA есть такая функциональность — она касается пропатчить последовательность байт и при этом IDA даже сохранит у себя в базе все места патчинга. Но, честно, я этим никогда не пользовался. Когда надо было патчить не очень интенсивно (пару байтиков) находил нужный адрес в 010 Editor и там менял байт. Если же нужны серьезные патчи, то пилим свои тулзы, чтобы быстро вставлять большие патчи с возможностью их компиляции на Си.

А мне больше зашел бесплатный Ghidra.
Я не занимаюсь реверсом на регулярной основе, да и вообще практически не занимаюсь, но все же некоторые основы ассемблера помню еще с конца 90-х, когда писал на нем, а так же пробовал (успешно) пару раз подлечить с помощью IDA программы лет 10 назад. И вот с пол-года назад захотел подправить прошивку на 3D-принтере (для ARM). И не помню уже подробностей, но вот никак у меня не шло дело с IDA. Так не шло, что я от безысходности полез в инет, нашел ссылку на Гидру (о которой помнил из новостей на Хабре), скачал ее — и дело пошло :) Настолько хорошо, что я не просто подправил прошивку, но даже заново переписал в ней многие вещи :) Например, ввел реальную мультиязычность в UTF-8, отображение имен файлов на русском языке, перевел работу с дисплеем на DMA и т.п.
Оказалось удобнее, гибче и понятнее, да и в псевдокод, на мой взгляд, Гидра переводит качественнее, чем ИДА, хотя не возьмусь утверждать это уверенно. Ну или я не смог разобраться до конца в ИДА и найти в ней то, что мне хотелось.

Имел в виду вот такое - отдельный плагин, красящий вызовы вообще любому процессору, имеющему данную таблицу флагов, ничего не зная о конкретных опкодах.

Хотя пока искал это, попалась и другая реализация, использующая idaapi.is_call_insn() - та, скорее всего, работает через событие ev_is_call_insn и в таблице флагов не нуждается. Но в ней есть и другие флаги помимо CF_CALL, мало ли кто как их дальше использует.

Как-то помогал закрыть баг в отличном процессорном модуле с github, где автор радикально отказался от разного подобного «с виду легаси», среди прочего убрав и перечисления регистров из processor_t (в out просто выводим “R%d”, op.reg) - всё вроде бы отлично работало, но падало при определённых действиях с окном сегментов, пока не добавили эти самые перечисления. Видимо тащить нам все эти легаси до конца времён (но при этом как лихо «модернизируется» Python API, старые скрипты перестают работать чуть ли не после каждого обновления уже).

Во-первых, к чему этот пафос с "высокими стандартами" и "строгим регулированием"?Вы реально верите, что в Португалии, Израиле или Грузии стандарты какие то другие или там Вашу шаражку не прикроют если Вы отчеты во время не сдадите?

Во-вторых, юр лицо в UK это:
1. Путанное и не очевидное законодательство, отталкивающееся от прецедентов чуть ли не 15го века;
2. Очень высокие по сравнению с другими странами расходы на "ведение" организации и ФОТ;
3. Очень странное понимание права частной собственности заключающееся в том, что банк, например, может приостановить операции по Вашему счету во вне судебном порядке руководствуясь откровенно политической мотивацией. А бесплатно ни кто эту Вашу проблему решать не будет.

Даже для ведения деятельности в UK гораздо разумнее зарегистрировать там представительство фирмы действующей к примеру в эстонской или португальской юрисдикции.

Кстати говоря, сейчас осуществил вариант, о котором писал в нескольких темах: добавил поддержку загрузки с NVME в legacy bios (AMI 8), который даже не слышал про NVMe и UEFI. Подопытные кролики — ASUS P5KLP-SE (в роли материнской платы) и Toshiba RC100 (в роли NVMe SSD).
Небольшое HOW-TO для тех, кто захочет повторить этот маразм:
1) Читаем тему на win-raid.com
2) Скачиваем архив из первого поста в ней.
3) Записываем VID/DID NVMe носителя, который планируем использовать. (Либо ищем в гугле, либо, что более надёжно, вставляем в материнку через переходник m.2 to pci-e, грузим линукс какой-нибудь и записываем нужные цифры из вывода lspci -n)
4) При помощи OpRomCfg.exe (или путём редактирования NvmeOpRom.bin, если не под виндами или руками привыкли всё делать) вписываем в прошивку значения из п.3 и контрольную сумму.
5) Если у вас AMI, то берём MMTool 3.19/3.22 и добавляем полученный опром. Если AWARD — то лучше заранее приготовить программатор, т.к. авард славится косяками своих родных утилит и часто ими убивает прошивку, но можно попытаться найти cbrom, который будет работать с вашей прошивкой нормально. Если Phoenix/Insyde — то всё совсем плохо.
6) Делаем бэкап прошивки.
7) Прошиваем полученный в п.5 образ
8) Заходим в меню выбора загрузочных устройств и наслаждаемся строчкой вида «NVME 01:00.00.1»
9) Ставим Windows 7 с добавленными дровами/Windows 8/Windows 10/Любимый дистрибутив линукса
10) Наслаждаемся жизнью без всяких Clover и воткнутых на постоянной основе флешек.

Вообще мой коммент был лулзов ради, но с вашими утверждениями готов поспорить :)

Он дешевле, т.к не нужен сервер с процессором

Сервер вам все равно нужен :) Обязательно с процессором :) Причем он будет нагружен кроме вашего редиректа еще тоннами логики приложений высокого уровня абстракций, которые скрывают от вас тот низкий уровень абстракции, где апач и процессор.
А сравнивать стоимость облака с необлаком без конкретных величин трафика, и т.п. бессмысленно. Каждый будет прав.

для того чтоб запускать апач

В моем примере апач запускать не надо :)

Он надежнее т.к у S3 хранилища и остальных компонент аптайм выше чем у вашего сервера с апачем

Дискуссионное утверждение )

Он быстрее, т.к тут вы получаете CDN в комплекте

Точно быстрее? После фразы в статье "Price class: выбрать нужный по балансу цена/время отклика."? Более того, тут вот пишут, что для этих функций latency 100мс - это офигеть как круто.

Он требует меньше головняка

Меньше головняка, что аж статью написали о том как это сделать :) Причем через 2 года она скорее всего устареет т.к. админ интерфейсы у прова изменятся и кнопки тыкать нужно будет в других местах.

И не нужно покупать сервер, ставить операционку, ставить апач и различные fail2ban и иже с ними механизмы как обезопасить сервер.

Ну да, без fail2ban на каком-нить vsp, если вдруг вы заинтересовали какого-нибуть доморощенного кулхацкера, у вас будет лежать сервер с вашей статикой, а на serverless, у вас будет лежать на столе счет на несколько килобаксов, т.к. хардлимитов из коробки нет, а прикрутить костыли для гашения всего этого добра, если оно начало жрать финансы, модуля терраформ не нашлось )

P.S.
Но я не хейчу облака, если что ) Они вполне круты для определенного рода задач.

Да, только статический сайт в конфигурации в статье даёт вам сразу кучу преимуществ:

  • Он дешевле, т.к не нужен сервер с процессором для того чтоб запускать апач

  • Он надежнее т.к у S3 хранилища и остальных компонент аптайм выше чем у вашего сервера с апачем

  • Он быстрее, т.к тут вы получаете CDN в комплекте

  • Он требует меньше головняка ибо не нужно обновлять сертификат

Да и насчёт простоты - конфигурация описанная в статье поднимается 30 строками терраформ кода которые можно найти в гитхабе готовым модулем. При желании сразу интегрированным с гитхабом для авто-обновления сайта с билдом (если скажем страничка на nodejs с webpack). И не нужно покупать сервер, ставить операционку, ставить апач и различные fail2ban и иже с ними механизмы как обезопасить сервер.

Так что не уверен что на самом деле проще. Наверное только github pages и всякие такие.

(автор сего камента сам много лет apt-get install apache2 пока не ушел в девопс, если что)

У дедов проще было )

server {
    listen       80;
    server_name  example.com www.example.com;
    return       301 https://example.com$request_uri;
}
server {
    listen       443;
    server_name  www.example.com;
    return       301 https://example.com$request_uri;
}
server {
    listen       443;
    server_name  example.com;
    ...
}

Ни один пост на Хабре про астрономические наблюдения не обходится без этого комментария, «но оно же уже произошло, мы просто этого еще не успели увидеть».

Между тем, это высказывание имеет не особенно много смысла, как практического, так и даже теоретического. Можно почитать про пространственноподобные и времениподобные интервалы. Найдутся такие системы отсчета, в которых будет «еще не произошло» по-настоящему. Более того, найдутся и такие, в которых «на самом деле» сначала произойдет вот этот момент прочтения данного комментария, а уже только ПОТОМ «на самом деле» взорвется Бетельгейзе (т.е. в обратном порядке). Все зависит от расстояния до наблюдателя и скорости относительного движения: одновременность (как и порядок событий в разных системах отсчета) относительны.

А пожалуйста.

Вы "быстродействие" обосновываете "более быстрым и эффективным развитие фреймворка", "лёгкостью, читабельностью и удобством в работе", "опытом программиста" и т.д. Это все, естественно, не связано.

Если оставить только связанное, то остаются только структуры против классов.

Отбросим тезис про то, что структуры быстрее, чем классы, т.к.это тоже очень холиварный вопрос (там все не так однозначно, как писали в рекламных статьях, продвигающих Swift).

Сконцентрируемся на том факте, что SwiftUI – это всего лишь обертка поверх UIKit. Т.е. все ваши структуры под капотом все равно создают соответствующие классы UIKit и работают с ними. Т.е. никакого выигрыша в производительности Вы не получите просто по одной причине: вместо того, чтобы работать только лишь с одними классами, вы еще создаете, модифицируете, гоняете по памяти, удаляете эти самые структуры-обертки-описания этих самых классов. Большее количество работы ну никак не может быть быстрее, чем меньшее количество работы. Согласны?

Теперь про "сборку мусора". Ее на iOS нет. Вместо нее используется механизм подсчета ссылок. Вопрос, который проясняют с каждым джуном на собеседовании. Этот механизм считается очень быстрым и имеющим нулевые затраты на управление памятью (на самом деле не нулевые, но близкие к нулю). При этом точно такой же механизм используется и для определения момента удаления структуры из стека. Поэтому этот аргумент в пользу быстродействия SwiftUI и структур тоже сомнителен.

Но да, спасибо за проделанную работу. Осталось ее подкорректировать и получится очень классная статья-сравнение. Можно будет ссылаться на нее и на Вас в моих дискуссиях про 2 технологии :)

В этом случае Вам поможет немного другая магия - "\# 0.0" Вот тут все варианты расписаны (нагуглил после прочтения комментария от xanto выше).

О, нашла способ прикрепить пример, что у меня делал ворд.

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Specialist
Lead