- 1
stwu r1, -0x18(r1)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−1
stwu r1, -0x18(r1)
PPC как бы говорит нам
Web_Monkey 18.10.2019 01:55 # +1
guest8 18.10.2019 02:21 # −999
STL 18.10.2019 02:35 # 0
guest8 18.10.2019 02:39 # −999
Web_Monkey 18.10.2019 03:13 # 0
Правда?
Например я занимаюсь парсингом каких-то данных, у меня есть указатель на текущий рассматриваемый байт look, и если мне вдруг понадобится прочитать какой-нибудь предыдущий байт я могу написать look[-1] или look[-2] и тюпю Вполне законный прием.
guest8 18.10.2019 03:17 # −999
Web_Monkey 18.10.2019 03:35 # 0
Ну передали откуда-нибудь указатель на буфер с данными, сначала он указывал на начало буфера, но по ходу чтения я его двигаю вперед, типичная же хуйня: Вряд ли мне на самом первом байте понадобится смотреть на зад
> я же написал
Сорян, ты пишешь как мудак, Обезьяна сразу не поняла.
guest8 18.10.2019 03:48 # −999
MAKAKA 01.06.2020 23:49 # 0
xyi 01.06.2020 23:50 # 0
MAKAKA 01.06.2020 23:51 # 0
Noodles 02.06.2020 00:14 # 0
MAPA6y 02.06.2020 00:22 # 0
guest6 06.06.2022 16:53 # 0
guest6 06.06.2022 17:02 # 0
guest6 06.06.2022 17:03 # 0
STL 18.10.2019 02:41 # 0
http://www.eecs.umich.edu/courses/eecs373.w04/ABI_matt.pdf
В r1 хранится указатель на вершину стека, а инструкция stwu r1, -0x18(r1) реализует сохранение frame pointer.
guest8 18.10.2019 02:50 # −999
STL 18.10.2019 03:00 # 0
guest8 18.10.2019 03:03 # −999
STL 18.10.2019 03:14 # 0
В этом примере BP нет. Считай, что используется только SP (его аналогом выступает r1). Но зачем-то старое значение SP сохраняется в стеке же. Ага, считай, что тут было PUSH SP после SUB SP, <размер локальных данных>.
Если же нам нужен FP, то стандартного регистра (типа BP) у PPC нет. В его качестве может использоваться произвольный номерной регистр (типа r31):
https://lists.ozlabs.org/pipermail/linuxppc-dev/2005-August/019456.html
guest8 18.10.2019 03:22 # −999
STL 18.10.2019 18:13 # 0
Бывают процессоры вообще без инструкций для стека. Нужно ручками сооружать инструкцию для инкремента/декремента указателя и для мува с косвенной адресацией. Ну прямо, как... тут. У PPC даже нет CALL и RET. У него есть инструкция BL, сохраняющая адрес возврата в регистр LR и прыгающая на указанный адрес, и инструкция BLR, прыгающая на адрес возврата, сохранённый в регистре LR. Если тебе нужно вызвать подпрограмму из подпрограммы, ты должен сам сохранить LR в стеке, которого нет, точнее, который (в смысле стек) ты сам реализуешь программно. Процессор без CALL и без RET, Карл!
В официальном ABI у PPC стек тоже растёт вниз. Можешь сделать его растущим в другом направлении, чтобы обломать дизассемблеры и дебагеры.
А у кого стек растёт вверх?
guest8 18.10.2019 20:16 # −999
guest8 18.10.2019 21:36 # −999
Dpyrou_Pycoqpo6_CEMA 18.10.2019 20:44 # 0
STL 18.10.2019 20:54 # 0
В общем, эмуляция стека на PPC - это целое искусство.
guest8 18.10.2019 20:56 # −999
STL 18.10.2019 21:04 # 0
Полагаю, что ППЦ изобрели люди с примерно таким же мышлением.
Зато, поскольку на ППЦ стек всё равно реализуется закатом Солнца вручную, можно иметь сразу несколько софтварных стеков, как в Форте или в Постскрипте.
Добро пожаловать в архитектуру RISC.
guest8 18.10.2019 21:33 # −999
STL 18.10.2019 21:37 # 0
Нет, я только пароль Чингиза знаю.
Теперь знаю.
guest8 18.10.2019 21:41 # −999
guest8 18.10.2019 21:42 # −999
guest8 18.10.2019 21:44 # −999
STL 18.10.2019 21:46 # 0
gost 18.10.2019 21:52 # 0
MAKAKA 01.06.2020 23:53 # 0
STL 18.10.2019 21:42 # 0
guest8 18.10.2019 21:45 # −999
STL 18.10.2019 21:48 # 0
guest8 18.10.2019 21:52 # −999
STL 18.10.2019 23:02 # 0
guest8 18.10.2019 23:08 # −999
guest8 18.10.2019 23:17 # −999
guest8 18.10.2019 23:30 # −999
guest8 18.10.2019 23:32 # −999
Dpyrou_Pycoqpo6_CEMA 18.10.2019 23:20 # 0
STL 19.10.2019 00:07 # 0
guest8 19.10.2019 00:09 # −999
STL 19.10.2019 00:15 # 0
guest8 19.10.2019 00:18 # −999
STL 19.10.2019 00:20 # 0
guest8 19.10.2019 00:21 # −999
STL 19.10.2019 00:25 # 0
STL 19.10.2019 00:22 # 0
guest8 19.10.2019 00:24 # −999
gost 19.10.2019 00:51 # 0
А этого за что?
guest8 17.11.2019 21:39 # −999
gost 18.11.2019 10:36 # 0
MAKAKA 01.06.2020 23:53 # 0
CkpunmoBbIu_nemyx 19.10.2019 12:12 # 0
Dpyrou_Pycoqpo6_CEMA 20.10.2019 22:26 # 0
guest8 19.10.2019 00:26 # −999
Dpyrou_Pycoqpo6_CEMA 20.10.2019 22:24 # 0
Dpyrou_Pycoqpo6_CEMA 20.10.2019 22:53 # 0
BATHbIu_nemyx 21.10.2019 23:26 # 0
nyTuH_nugop 23.10.2019 06:39 # −102
nyTuH_nugop 17.05.2022 21:53 # 0
Я так думаю, что вымоченные в холодной воде бананы лучше заходят.
guest8 18.10.2019 21:38 # −999
guest8 18.10.2019 21:39 # −999
MAKAKA 01.06.2020 23:53 # 0
BATHbIu_nemyx 18.10.2019 17:06 # 0
BATHbIu_nemyx 18.10.2019 03:14 # 0
Web_Monkey 18.10.2019 03:52 # 0
guest8 18.10.2019 10:42 # −999
MPA3b 19.10.2019 03:23 # +1
guest8 19.10.2019 04:16 # −999
MPA3b 19.10.2019 10:30 # 0
DyKaJluC 19.10.2019 11:56 # 0
BATHbIu_nemyx 18.10.2019 17:00 # 0
MAKAKA 01.06.2020 23:52 # 0
BATHbIu_nemyx 18.10.2019 03:09 # 0
Лучше вернись к воплям "игнорируйте его" и не лезь к дядям.
STL 18.10.2019 02:28 # 0
https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/assembler/idalangref_stwu_stu_instrs.html
Если бы были разные регистры, выглядело бы так: Случай, когда eax изначально равнялось нулю или когда произошло исключение, я не рассматриваю.
Но тут слева и справа один и тот же регистр. Возможно, это UB.
STL 18.10.2019 20:48 # 0
А что будет лежать по адресу [r1-0x18]: старое значение r1 или новое?
По картинкам похоже, что старое.
guest6 06.06.2022 16:24 # 0
rss 18.10.2019 10:14 # 0
rss 18.10.2019 10:15 # 0
rss 18.10.2019 10:19 # 0
rss 18.10.2019 10:19 # 0
rss 18.10.2019 10:23 # 0
rss 18.10.2019 10:42 # 0
rss 18.10.2019 10:43 # 0
rss 18.10.2019 10:48 # 0
rss 18.10.2019 11:05 # 0
rss 18.10.2019 11:06 # 0
rss 18.10.2019 11:09 # 0
unicorn 18.10.2019 16:06 # 0
BATHbIu_nemyx 18.10.2019 17:03 # 0
CTAJIuHCKuu_COKOJI 18.10.2019 20:35 # 0