- 1
stwu r1, -0x18(r1)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
stwu r1, -0x18(r1)
PPC как бы говорит нам
Web_Monkey # 0
guest # 0 ⇈
Хотя вообще говоря странное желание сказать
не находишь?
STL # 0 ⇈
guest # 0 ⇈
Если только сам foo не родился в резлуьтате положительного смещения
Web_Monkey # 0 ⇈
Правда?
Например я занимаюсь парсингом каких-то данных, у меня есть указатель на текущий рассматриваемый байт look, и если мне вдруг понадобится прочитать какой-нибудь предыдущий байт я могу написать look[-1] или look[-2] и тюпю Вполне законный прием.
guest # 0 ⇈
если ты взял его из указателя hujuk путем прибавления к нему N, то я же написал
>Если только сам foo не родился в резлуьтате положительного смещения
если же look это результат malloc, то ты в жопе UB
Web_Monkey # 0 ⇈
Ну передали откуда-нибудь указатель на буфер с данными, сначала он указывал на начало буфера, но по ходу чтения я его двигаю вперед, типичная же хуйня: Вряд ли мне на самом первом байте понадобится смотреть на зад
> я же написал
Сорян, ты пишешь как мудак, Обезьяна сразу не поняла.
guest # 0 ⇈
MAKAKA # 0 ⇈
xyi # 0 ⇈
MAKAKA # 0 ⇈
Noodles # 0 ⇈
MAPA6y # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
STL # 0 ⇈
http://www.eecs.umich.edu/courses/eecs373.w04/ABI_matt.pdf
В r1 хранится указатель на вершину стека, а инструкция stwu r1, -0x18(r1) реализует сохранение frame pointer.
guest # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
uint_8 этоже байт
короче,это как bp,тогда понятно
а бывает FPO у powerpc?
STL # 0 ⇈
В этом примере BP нет. Считай, что используется только SP (его аналогом выступает r1). Но зачем-то старое значение SP сохраняется в стеке же. Ага, считай, что тут было PUSH SP после SUB SP, <размер локальных данных>.
Если же нам нужен FP, то стандартного регистра (типа BP) у PPC нет. В его качестве может использоваться произвольный номерной регистр (типа r31):
https://lists.ozlabs.org/pipermail/linuxppc-dev/2005-August/019456.html
guest # 0 ⇈
BP хранили для двух вещей
* Человеку (не компилятору) проще считать смещение от BP к локальным переменным, чем смешение от SP (который постоянно скачет как блоха)
* Всегда можно найти головку от фрейма, даже если размер локальных данных неизвестен (символов нет, например). Дебагер может раскрутить стек
А тут зачем?
зы: зачем у интела стек растет задом наперед? Я из за этого постоянно путаюсь
STL # 0 ⇈
Бывают процессоры вообще без инструкций для стека. Нужно ручками сооружать инструкцию для инкремента/декремента указателя и для мува с косвенной адресацией. Ну прямо, как... тут. У PPC даже нет CALL и RET. У него есть инструкция BL, сохраняющая адрес возврата в регистр LR и прыгающая на указанный адрес, и инструкция BLR, прыгающая на адрес возврата, сохранённый в регистре LR. Если тебе нужно вызвать подпрограмму из подпрограммы, ты должен сам сохранить LR в стеке, которого нет, точнее, который (в смысле стек) ты сам реализуешь программно. Процессор без CALL и без RET, Карл!
В официальном ABI у PPC стек тоже растёт вниз. Можешь сделать его растущим в другом направлении, чтобы обломать дизассемблеры и дебагеры.
А у кого стек растёт вверх?
guest # 0 ⇈
guest # 0 ⇈
STL, переведи на S"Forth".
Dpyrou_Pycoqpo6_CEMA # 0 ⇈
STL # 0 ⇈
В общем, эмуляция стека на PPC - это целое искусство.
guest # 0 ⇈
Да, PPC это ППЦ. Хорошо, что Ябло ушло на сраный интел.
STL # 0 ⇈
Полагаю, что ППЦ изобрели люди с примерно таким же мышлением.
Зато, поскольку на ППЦ стек всё равно реализуется закатом Солнца вручную, можно иметь сразу несколько софтварных стеков, как в Форте или в Постскрипте.
Добро пожаловать в архитектуру RISC.
guest # 0 ⇈
Я такого программиста видел.
Даже если фиксированность глубины была очевидна (например, обходили захардкоженное двухуровневое дерево) он начинал верещать, что "рекурсия приводит к неконтролируемому возрастанию стека" и требовал переписать на циклы.
Эксперемент про обезьян, банан, и холодную воду знаешь?
>несколько софтварных стеков, к
Кстати, у потока и так два стека. Ядрёный и обычный
STL # 0 ⇈
Нет, я только пароль Чингиза знаю.
Теперь знаю.
guest # 0 ⇈
Одному мальчику в институте кто-то сказал, что шаблоны это плохо, и теперь он лучше руками накопипастит, чем возьмет шаблон.
Другому сказали, что регулярки никогда не читаемы, или что AOP неоправданно усложеняет код, или что java тормозит. Тысячи их.
guest # 0 ⇈
guest # 0 ⇈
Но вот если ты сам поел пхп, то можешь смело говорить, что пхп говно. А если ты об этом прочитал в блоге Умного Программиста Из Крутой Компании, то относиться надо критически мягко говоря.
STL # 0 ⇈
gost # 0 ⇈
MAKAKA # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
http://holywars.ru/user/6598/wars
Dpyrou_Pycoqpo6_CEMA # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
STL # 0 ⇈
STL # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
А этого за что?
guest # 0 ⇈
gost # 0 ⇈
MAKAKA # 0 ⇈
CkpunmoBbIu_nemyx # 0 ⇈
Dpyrou_Pycoqpo6_CEMA # 0 ⇈
guest # 0 ⇈
Dpyrou_Pycoqpo6_CEMA # 0 ⇈
Dpyrou_Pycoqpo6_CEMA # 0 ⇈
BATHbIu_nemyx # 0 ⇈
nyTuH_nugop # 0 ⇈
nyTuH_nugop # 0 ⇈
Я так думаю, что вымоченные в холодной воде бананы лучше заходят.
guest # 0 ⇈
guest # 0 ⇈
MAKAKA # 0 ⇈
BATHbIu_nemyx # 0 ⇈
BATHbIu_nemyx # 0 ⇈
Web_Monkey # 0 ⇈
guest # 0 ⇈
MPA3b # 0 ⇈
guest # 0 ⇈
MPA3b # 0 ⇈
DyKaJluC # 0 ⇈
BATHbIu_nemyx # 0 ⇈
MAKAKA # 0 ⇈
BATHbIu_nemyx # 0 ⇈
Лучше вернись к воплям "игнорируйте его" и не лезь к дядям.
STL # 0 ⇈
https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/assembler/idalangref_stwu_stu_instrs.html
Если бы были разные регистры, выглядело бы так: Случай, когда eax изначально равнялось нулю или когда произошло исключение, я не рассматриваю.
Но тут слева и справа один и тот же регистр. Возможно, это UB.
STL # 0 ⇈
А что будет лежать по адресу [r1-0x18]: старое значение r1 или новое?
По картинкам похоже, что старое.
guest # 0 ⇈
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
rss # 0
unicorn # 0 ⇈
BATHbIu_nemyx # 0 ⇈
CTAJIuHCKuu_COKOJI # 0 ⇈