Дмитрий
Еще вопросик, скомпилил 32 битный листинг, в начале мейна вот такие строчки, в чем смысл первых трех и последней? leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx
Aiwan \ (•◡•) / _bot
Еще вопросик, скомпилил 32 битный листинг, в начале мейна вот такие строчки, в чем смысл первых трех и последней? leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx
контекст нужен, непонятно на каком адресе находятся текущие интсрукции, непонятно что в стеке находится по адресу esp+4, не известно значение esp и eip, а они там пересекаются вроде изза and (адрес улетает кудато)
Aiwan \ (•◡•) / _bot
отладка тебе поможет
Дмитрий
вот начало программы
Aiwan \ (•◡•) / _bot
и каков адрес при выполнении and, и каков esp?
Aiwan \ (•◡•) / _bot
тебе эт выполнить по инструкциям надо и посмотреть что там происходит с адресами
Aiwan \ (•◡•) / _bot
у меня после and стек оказывается в неположенном месте, следовательно ранее были какие то манипуляции со стеком или сама прога грузится в нестандартные адреса, если это все потом работает, имхо.
Eugene
1. ecx = esp + 4, т.е. адрес параметров в стеке. 2. Выравнивание стека по границе 16 байт. 3. Запись в стек адреса возврата. 4,5. Стандартный фрейм (ebp будет кратен 8, но не кратен 16). 6. Сохранение адреса параметров.
Eugene
https://habr.com/ru/company/ruvds/blog/588102/
Дмитрий
Спасибо за помощь
Aiwan \ (•◡•) / _bot
ха, только щас кажись допер, что $ это не текущий адрес (как в асмах с интел синтаксисом), а обозначение шестнадцатеричного числа
Aiwan \ (•◡•) / _bot
а как тогда обозначается текущий адрес?
Eugene
а как тогда обозначается текущий адрес?
Точкой. Разделение сегмента и смещения тоже точкой (типа %es.0x1000).
Eugene
Хотя вот здесь написано, что через : разделяется сегмент.
Anonymous
#book https://t.me/oldpixels/14
­
#book https://t.me/oldpixels/14
Тебе уже говорили - скачай и выложи нормально.
Anonymous
Тебе уже говорили - скачай и выложи нормально.
У тебя проблемы со скачиванием?
­
У тебя проблемы со скачиванием?
Ты сейчас занимаешься рекламой другого чата.
Anonymous
Ты сейчас занимаешься рекламой другого чата.
Если тут будет годный пост, он тоже уйдёт в другие группы в виде "рекламы"
­
Не надо писать несколько сообщений подряд.
Aiwan \ (•◡•) / _bot
👆
Aiwan \ (•◡•) / _bot
#book (вроде как скан лучше оформлен) Автор: Александр Борисович Крупник Год издания: 2005 Описание: Книга знакомит читателя с ассемблером - универсальным языком «низкого уровня», на который переводятся другие, «высокоуровневые» языки. Будучи основой таких языков, ассемблер позволяет лучше понять и Си, и С++, и Паскаль. Кроме того, с его помощью можно написать отдельные части программ так, чтобы они быстрее выполнялись. В силу своей универсальности ассемблер позволяет менять и чужие программы, исходный текст которых на языке высокого уровня недоступен.
@ENERGY_STAFF
Чем можно собрать под mips в linux?
@ENERGY_STAFF
из консоли
­
GCC
@ENERGY_STAFF
GCC
нашел mipsel-openwrt-linux-musl-as
@ENERGY_STAFF
а как отлаживают, чтобы регистры смотреть?
Hello, World! 🎄
нашел mipsel-openwrt-linux-musl-as
Musl это стандартная библиотека для C. Хотя обычно используется glibc.
@ENERGY_STAFF
nop sltiu $v0, 8 beqz $v0, loc_43E42C nop Перейдет на loc_43E42C?
@ENERGY_STAFF
не понимаю, у sltiu три аргумента
@ENERGY_STAFF
а тут 2
@ENERGY_STAFF
как это работает
s54820
как это работает
Это ведь IDA? Она упрощает. Читай sltiu $v0, $v0, 8.
@ENERGY_STAFF
Есть массив word'ов (32 бита). Архитектура mips. Индекс в массив вычисляется и берется значение из массива. Если происходит выход за границы segmentation fault будет?
s54820
Есть массив word'ов (32 бита). Архитектура mips. Индекс в массив вычисляется и берется значение из массива. Если происходит выход за границы segmentation fault будет?
Мипсы разные бывают. Если там полноценная ОС с кучей и виртуальной памятью вокруг, то после последнего элемента (но не обязательно сразу после него) может не оказаться страницы памяти (а может оказаться, тут как повезёт). А если это какой-нибудь плейстейшен, где память одним куском, то вряд ли.
@ENERGY_STAFF
Я думал может какая проверка есть границ массива
@ENERGY_STAFF
Самое интересное, что код живет и не падает
@ENERGY_STAFF
Вот этот участок lw $v0, 4+arg_0($fp) #arg_0 = 4 nop xor $v0, $v1, $v0 andi $v1, $v0, 0xFF lui $v0, 0x45 # 'E' - непонятно для чего sll $v1, 2 li $v0, dword_44B7FC addu $v0, $v1, $v0 #добавляем смещение к адресу lw $v1, 0($v0) #забираем значение из массива dword_44B7FC - массив
@ENERGY_STAFF
а для чего там 0x45 записывается в v0 загадка для меня
@ENERGY_STAFF
Так там ограничен индекс сверху (andi).
после умножения сдвиг влево на 2
s54820
а для чего там 0x45 записывается в v0 загадка для меня
Я могу ошибаться, но скорее всего дело опять в IDA. Вон видишь li? Такой инструкции нет. В RISC фиксированная длина инструкций, и в 32-битную инструкцию никак нельзя закодировать одновременно опкод и произвольный 32-битный immediate. Поэтому среди прочих способов используется вариант, когда значение считается двумя инструкциями. lui скорее всего грузит первый кусок, а вместо li там что-то другое, которое из этого куска и ещё чего-то считает финальный адрес. Просто IDA сама адрес посчитала и заменила на макроинструкцию, чтобы тебе было удобнее читать. Это где-то выключается, но лучше не стоит.
s54820
после умножения сдвиг влево на 2
Ну да. Там массив из 256 32-битных элементов.
Guldan
Какой ассемблер посоветуете изучать?
Guldan
для чего он тебе нужен?
Для глубокого понимания работы компьютера и операционной системы, ну и для трудоустройства
Dmitry
ассемблер по факту не для начинающих, если нет опыта в программировании, то будет потрачено слишком много времени на изучение, это во первых во вторых ассемблер на рынке труда почти не востребован поэтому изучение его для трудоустройства это как минимум не рентабельно с точки зрения времени и усилий
Dmitry
а так книжку чуть выше приложили ребята
Aiwan \ (•◡•) / _bot
Вполне себе для начинающих, как раз для понимания работы компьютера, а не для востребованной профессии.
но вопрошающий совмещает "новичок" и "трудоустройство" в одно целое. тут получается одно исключает другое, чтоб трудоустроиться надо быть спецом, а быть спецом - не быть новичком
Aiwan \ (•◡•) / _bot
он наверное ищет материал, как в пресловутых рекламмах по курсам питона "пройдите наш курс от высококвалифицированных преподов и получите гарантированную работу". с асмом такое не сработает. во-первых, рынок труда очень маленький, во-вторых, если и есть местечко, то оно довольно специфичное, либо асм там играет не первостепенную роль (следовательно и другие инструменты надо знать лучше чем асм)
Aiwan \ (•◡•) / _bot
кто то говорил про кольцо знаний для асма. можно пойти на право, а можно и налево. пройдя весь круг с любой стороны знания асма (да и любого другого ЯП) будут полноценны
Vladimir
Вообще, перед изучением программирования реальных процессоров я бы изучил какую-нибудь примитивную искусственную стековую машину, чтобы понять основы
Vladimir
а потом уже переходить к реальным ISA
Vladimir
вот у меня в децтве MK-61 был :))
Eugene
Для глубокого понимания работы компьютера и операционной системы, ну и для трудоустройства
Если говорить об x86, то все диалекты +/- одинаковые, не считая GAS с его AT&T, но и на него несложно переучиться. Основное различие - директивы и макросы (т.е. всё, что вокруг инструкций). Короче, если интересует Windows, учи fasm (ну или MASM, но он более замороченный). Если Linux - NASM. А так парни дело говорят. Спрос не очень (обычно как доп язык), з/п тоже. Больше ценится то, что около языка (значение внутреннего устройства ОС, ревес инжиниринг и т.п.) - тут можно найти что-то стоящее, но опять же, вакансий даже близко не столько, сколько на Java/Python/PHP, скажем. По любому вместе с языком (а то и "до") стоит изучить устройство компьютера и хотя бы базовое понимание ОС. Глянь: - xk8.ru/asmlinks - https://youtube.com/c/AlekOS1 (быстро и ёмко, для начала норм)
Aiwan \ (•◡•) / _bot
брысь
­
Опять спам?
акуадё
Добрый день. Какие хорошие деббагеры есть для линукса? Использовал the dude, но может что-то появилось более удобное и мощное как тот же x64dbg..?)
Петя
салют, не знаете хороших чатов по физике? задался вопросом на тему дирижаблей, а у кого спросить не знаю
Anonymous
А там возможно изучить принцип работы БПЛА? В этих чатах
🤦‍♂ а там и до звездолёта недалеко, главное чат найти)
Петя
смешно, понял, спасибо
­
Anonymous
Ссылку
Guldan
смешно, понял, спасибо
Если найдете поделитесь ссылкой пожалуйста
Guldan
обязательно
Спасибо большое
Ivan
ребят, привет, не совсем про асм, но про C. помогите пожалуйста раздуплить как dlopen работает? я тут собираю линуксовую тулу tc и у неё есть плагины, которые подтягиваются с помощью dlopen вот так https://github.com/shemminger/iproute2/blob/main/tc/tc.c#L166-L175 я собираю и запускаю LD_DEBUG=all tc filter add bpf help я смотрю на эту простыню и среди прочего и прочего у меня есть строчка 15935: file=/usr/lib/tc//f_bpf.so [0]; dynamically loaded by ./tc/server-with-tc [0] но фишка в том, что это докер контейнер и в нём нет такого файла вообще! ls /usr/lib/tc/ experimental.dist m_xt.so pareto.dist q_atm.so m_ipt.so normal.dist paretonormal.dist и даже вот эта штука не возвращает ничего find / | grep '\.so$' | grep f_
Ivan
в общем-то если поставить пакет apt-get install -y net-tools то и на вашем линуксе воспроизведётся, наверное
­
Это тебе в supapro.cxx
Aiwan \ (•◡•) / _bot
Это тебе в supapro.cxx
предвкушаю слова "да я так, мож кто сталкивался с этим"
акуадё
только что для себя открыл ida freeware
Ида на Винде или я не про то думаю