Практика языка C (МФТИ, 2023-2024). Семинар 6.2. Условные переходы и память в ассемблере x86.

  Рет қаралды 15,884

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Пікірлер: 57
@MikhailGoncharov-tl4cr
@MikhailGoncharov-tl4cr 6 ай бұрын
О Боже какое счастье прямой эфир, ваши лекции золото
@tilir
@tilir 6 ай бұрын
Спасибо на добром слове, но премьера это не прямой эфир. Это обработанная запись которая эфиром немного притворяется.
@mahabat23
@mahabat23 6 ай бұрын
посмотрел, теперь буду как дурак умным ходить :-) лучшие лекции по тематике
@sibedir
@sibedir 6 ай бұрын
Тааак, всем привет. Дядя Женя 41 годик снова пришёл на лекцию 😊. Пошёл смотреть с самого начала.
@russiancybercheck
@russiancybercheck 4 ай бұрын
Дядь Женя, есть прекрасная книга. Язык программирования Си. Стивен Прата.
@intivi5277
@intivi5277 6 ай бұрын
Зараза! Залез на пару минут глянуть о чем семинар. Опомнился только после окончания видео. Подача отличная, материал усваивается моментально.
@phil2964
@phil2964 6 ай бұрын
Просто смотрю и нкайфую, спасибо огромное👍👍👍
@DuplexKrokodile
@DuplexKrokodile 6 ай бұрын
И снова лайк заранее)
@АлексейАндреевич-ж2ж
@АлексейАндреевич-ж2ж 6 ай бұрын
Как круто что я вас нашел, так доходчиво все, еще бы по языкам для ПЛИС такого преподавателя)
@vitalyistr
@vitalyistr 6 ай бұрын
Круто! Приятно вспомнить молодость
@ArtemDaineko-f7p
@ArtemDaineko-f7p 6 ай бұрын
Как всегда великолепно и четко объяснили 👍
@SpanchBobSpannish
@SpanchBobSpannish 6 ай бұрын
15 тысяч вы набрали, поздравляю 😄
@pavelrid
@pavelrid 6 ай бұрын
Какая ностальгия. Я помню учился ассемблеру по книжке, отладчик был OllyDBG, а в качестве дизассемблера использовал HIEW и дебажил крякмисы из журнала Хакер :-D интернет тога был был по карточкам и диалап модемчику
@tilir
@tilir 6 ай бұрын
Ну вот да. Я считаю нельзя совсем уж лишать детей этого опыта ))
@КонстантинНестеров-в8и
@КонстантинНестеров-в8и 6 ай бұрын
Спасибо за семинар) Как всегда - потрясающе 44:11 Могу ошибаться, но кажется, что код на C мог бы выглядеть так: int foo(int *arr, int len) { int i, value = 0; if (len
@tilir
@tilir 6 ай бұрын
Да вы правы это inclusive scan.
@voffkaopera
@voffkaopera 6 ай бұрын
код на 18 слайде с goto можно заменить на это for (i=0; i
@tilir
@tilir 6 ай бұрын
А вы уверены что замена эквивалентная? У вас вместо 2×N итераций в случае когда условия не выполняются получилось N×N.
@voffkaopera
@voffkaopera 6 ай бұрын
@@tilir да вы правы, об оптимизации при не выполнении я не подумал
@voffkaopera
@voffkaopera 6 ай бұрын
а если так прервать цикл ? for (i=0; i
@ЮрийПершин-е1з
@ЮрийПершин-е1з 6 ай бұрын
Чуть-чуть не так считали точку приземления. В момент вычисления "куда пойду" IP равен уже 0x1244, и тогда точное попадание на второй call abort (0x1244+0x2B=0x126F). И ничего не рассказали про то, зачем компилятор на O1 бережно сдублировал нам аборты (чтобы мы не ругали потом отладчик). Но это все мелочи, лекции очень крутые!
@Airatgl
@Airatgl 6 ай бұрын
goto активно используется в ядре Линукса в probe функциях драйверов для перехода к обработке ошибок.
@m6vrm
@m6vrm 6 ай бұрын
И для освобождения ресурсов (подобие defer). Если переходы осуществляются только в конец функции, то код получается читаемее, чем если пытаться придумать вермишель без использования goto только потому что неправильно научили, что это "безусловное зло".
@phil2964
@phil2964 6 ай бұрын
Тут еще и немного реверс инжиниринга😀 Константин, есть инструмент radare2, очень удрбный дизассемблер, hex editor и еще еще еще👍👍👍
@tilir
@tilir 6 ай бұрын
Я в курсе. Хотя моё детство пришлось на IDA и Softice, я стараюсь не отставать от новых технологий. Ещё Hydra знаю, тоже очень интересное решение. Но я не учу детей прицельно реверс-инжинирингу. Это просто для общего образования. Если заинтересуются сами всё найдут. А вот хотя бы в комментах и найдут )))
@nikitaq123
@nikitaq123 6 ай бұрын
Наверно вы все таки имели ввиду Ghidra@@tilir
@olegpatraschku3736
@olegpatraschku3736 4 ай бұрын
28:22 (-5) - (-4) = -1 )
@evgenyrozhnowsky6572
@evgenyrozhnowsky6572 5 ай бұрын
@tilir, Константин, вы упомянули упомянули способ хранения данных, в данном кейсе little-endian. На примере опкода 74 2b на этом тайминге 57:07. Открыв бинарь через хекс- редактор порядок был прямым, как будто это big-endian, я чтото упускаю?
@napalm20005
@napalm20005 4 ай бұрын
1:23:28 То неловкое чувство, когда решил cm0 за полтора часа((
@MahdiyDev
@MahdiyDev 6 ай бұрын
3:50 on right side it is not while loop. It is do while
@tilir
@tilir 6 ай бұрын
Ничего подобного. Это while так как я оставил сверху проверку которая обеспечивает безопасный вход в первую итерацию. Я просто её немножко обобщил ))
@sibedir
@sibedir 6 ай бұрын
57:10 Так вот кто эти хулиганы, которые мой айпи с помощью артмани взломали
@tilir
@tilir 6 ай бұрын
You've been pwn'd
@KrINekroN
@KrINekroN 6 ай бұрын
в инете давно уже забрасывают асм, а зря..и курсов никто нормальных не делает для х64, крис касперски толковые книжки выпустил про exe и реверс, но охото свежего
@malsh5288
@malsh5288 6 ай бұрын
Хорош! Ещё бы полноценный курс по реверс-инжинирингу...
@doctor_livsi_pod_phonk
@doctor_livsi_pod_phonk 6 ай бұрын
Это преподаватель а не шарлотан с курсов.
@maximpahomov3977
@maximpahomov3977 2 ай бұрын
На 35:01 (слайд 27), разве у ja не должно проверяться сразу два флага (&&), а не любой из них (||)?
@tilir
@tilir 2 ай бұрын
Спасибо, вы правы, добавил в errata
@НиколасГрант-н1ч
@НиколасГрант-н1ч 6 ай бұрын
Ждать ответку белому дому, за их совет: не пишете на c/c++ - небезопасно?
@tilir
@tilir 6 ай бұрын
Какое мне дело до американского правительства? ))
@MVZ1983
@MVZ1983 4 ай бұрын
Балы, красавицы, лакеи, хакера, И вери трики кейс, и хруст французской булки...
@milsnel
@milsnel 6 ай бұрын
Очень инетересно, было бы круто если бы вы рассказали поглубже про crackme и PE-Header(ну и попутно про DOS-Header)
@tilir
@tilir 6 ай бұрын
Это не курс по реверс-инжинирингу. Я что-то расскажу про формат ELF на седьмом семинаре когда буду рассказывать как программу загружают и что при этом происходит. Но не более того.
@disperf2928
@disperf2928 6 ай бұрын
Не совсем по теме лекций. Хорошо проникаешься ассемблером, если купить себе простую fpga и самостоятельно сделать на ней очень простую архитектуру, например по nand2tetris
@tilir
@tilir 6 ай бұрын
Это уже скорее разработка железа. Для того чтобы разобраться именно в ассемблере лучше взять одноплатный ПК и что-нибудь там написать под bare metal. У нас действует лаборатория RISC-V куда первокурсники могут зайти и всё испытать.
@kotanvich
@kotanvich 6 ай бұрын
К сожалению ассемблер почти не знаю, но не прав ли я, что на 44 минуте код вычисляет что-то вроде коммулятивнрй суммы массива , на который указывает x?
@tilir
@tilir 6 ай бұрын
Хорошая гипотеза. Как будете проверять?
@kotanvich
@kotanvich 6 ай бұрын
@@tilirя бы скомпилировал код ассемблера и потом протестировал бы на разных данных его путем вызова из си:) сегодня так и сделаю)
@tarmo9010
@tarmo9010 6 ай бұрын
у интел самый норм синтаксис, кто вообще додумался делать вот так 4(%esp) или 4(r1) , Кто этот гений, где хоть один язык программирования где доступ к данным через скобки (), а не "[ ]". еще и переменой мест базы и смещения, Прикиньте если бы было бы так int a = 4(arr) вместо arr[4],
@tilir
@tilir 6 ай бұрын
Я полагаю синтаксис AT&T планировался исходя из лёгкости автоматического разбора, без оглядки на проблемы кожаных мешков.
@tarmo9010
@tarmo9010 6 ай бұрын
Кто додумался до Регистра флагов, Это же ОЧЕВИДНО КОСТЫЛЬ. Я вот не понимаю, как в risc архитектурах, При ограниченном числе команд хватает места на все команды, а в x86 c 5000 инструкциями наверное(и 100к строк декодером к примеру iced) Не хватает места на отдельные инструкции знаковые, без. Вот это то же парадокс.
@tilir
@tilir 6 ай бұрын
Ну как сказать. Есть три решения: глобальный регистр флагов, флаги прикреплённые к регистрам или отказ от флагов. Все три имеют свои удачные реализации.
@TOSHIKGAME
@TOSHIKGAME 6 ай бұрын
Уже так много хороших лекций,а я всё поверхностно смотрю,всратую игрушку не могу опубликовать и забыть как кошмарный сон.сегодня последняя попытка и нафиг её.такие темы нормальные пропускаю
@tilir
@tilir 6 ай бұрын
Не материтесь пожалуйста. Ну и хм... если что-то хочется забыть как страшный сон, может быть действительно стоит взять паузу. Мне кажется программирование должно в первую очередь приносить радость ))
@The604FX
@The604FX 6 ай бұрын
Здравствуйте. Отличная лекция. Единственное, слайд "Концепция эффективного адреса" из-за опечатки мозг сильно ломает. Хотелось бы в errata пояснение к этому моменту добавить с разъяснением как получается адрес. Потому что приходится много думать, почему на месте двойки на самом деле восьмёрка и в голове держать, что int - это 4 байта, а не восемь
@tilir
@tilir 6 ай бұрын
Я же поправляюсь прямо по ходу изложения. Обычно в эррату я сношу то что наглухо пропустил.
@The604FX
@The604FX 6 ай бұрын
@@tilir да, так и есть. Возможно я просто устал сегодня или это моя особенность, но понял я что происходит когда раз пять этот момент пересмотрел, ещё и сильно думая, в промежутках. Мой комментарий вас ни к чему не обязывает, просто захотелось дать обратную связь. Лекция то всё равно на высоте :)
Офицер, я всё объясню
01:00
История одного вокалиста
Рет қаралды 2,3 МЛН