Дмитрий
Еще вопросик, скомпилил 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
Aiwan \ (•◡•) / _bot
а как тогда обозначается текущий адрес?
Eugene
Хотя вот здесь написано, что через : разделяется сегмент.
Anonymous
#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
а как отлаживают, чтобы регистры смотреть?
@ENERGY_STAFF
nop
sltiu $v0, 8
beqz $v0, loc_43E42C
nop
Перейдет на loc_43E42C?
@ENERGY_STAFF
не понимаю, у sltiu три аргумента
@ENERGY_STAFF
а тут 2
@ENERGY_STAFF
как это работает
@ENERGY_STAFF
@ENERGY_STAFF
Есть массив word'ов (32 бита). Архитектура mips. Индекс в массив вычисляется и берется значение из массива. Если происходит выход за границы segmentation fault будет?
@ENERGY_STAFF
@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 - массив
s54820
Вот этот участок
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 - массив
Так там ограничен индекс сверху (andi).
@ENERGY_STAFF
а для чего там 0x45 записывается в v0 загадка для меня
@ENERGY_STAFF
s54820
а для чего там 0x45 записывается в v0 загадка для меня
Я могу ошибаться, но скорее всего дело опять в IDA. Вон видишь li? Такой инструкции нет. В RISC фиксированная длина инструкций, и в 32-битную инструкцию никак нельзя закодировать одновременно опкод и произвольный 32-битный immediate. Поэтому среди прочих способов используется вариант, когда значение считается двумя инструкциями. lui скорее всего грузит первый кусок, а вместо li там что-то другое, которое из этого куска и ещё чего-то считает финальный адрес. Просто IDA сама адрес посчитала и заменила на макроинструкцию, чтобы тебе было удобнее читать. Это где-то выключается, но лучше не стоит.
Guldan
Какой ассемблер посоветуете изучать?
Dmitry
Guldan
для чего он тебе нужен?
Для глубокого понимания работы компьютера и операционной системы, ну и для трудоустройства
Dmitry
ассемблер по факту не для начинающих, если нет опыта в программировании, то будет потрачено слишком много времени на изучение, это во первых
во вторых ассемблер на рынке труда почти не востребован
поэтому изучение его для трудоустройства это как минимум не рентабельно с точки зрения времени и усилий
Dmitry
а так книжку чуть выше приложили ребята
Vladimir
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..?)
Aiwan \ (•◡•) / _bot
Петя
салют, не знаете хороших чатов по физике? задался вопросом на тему дирижаблей, а у кого спросить не знаю
Guldan
Anonymous
Петя
смешно, понял, спасибо
Anonymous
Петя
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
акуадё