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