Проруха на arm32
2024-12-14 23:11Однако сурово я обломался с трассировкой на архитектуре arm32! Как выяснилось, линуксное ядро не поддерживает пошаговое выполнение для 32-битных ARM-ов. На arm64 отлично идёт, а на той же Olinuxino - фиг вам. Вызов ptrace(PTRACE_SINGLESTEP) возвращает EIO. И по той же причине не будет работать на mips или на riscv. Пичалька.
Я и начинал-то с единственной целью: выяснить механизм вызова функций из разделяемых библиотек на arm32. Линкер генерит хитрые процессорные инструкции в таблице переходов, которые самообновляются при первом вызове.
Хотя бы на arm64 можно пользоваться, и то хлеб:
Я и начинал-то с единственной целью: выяснить механизм вызова функций из разделяемых библиотек на arm32. Линкер генерит хитрые процессорные инструкции в таблице переходов, которые самообновляются при первом вызове.
Хотя бы на arm64 можно пользоваться, и то хлеб:
Starting program: ./hello-arm64-linux
sp = 0xffffcdbaed60
pstate = 0x1000
0x0000000000400078: d2800808 movz x8, #0x40
r8 = 0x40
pstate = 0x201000
0x000000000040007c: d2800020 movz x0, #0x1
r0 = 0x1
0x0000000000400080: 90000001 adrp x1, #0x400000
r1 = 0x400000
0x0000000000400084: 91027021 add x1, x1, #0x9c
r1 = 0x40009c
0x0000000000400088: d28001a2 movz x2, #0xd
r2 = 0xd
0x000000000040008c: d4000001 svc #0
Hello world!
r0 = 0xd
0x0000000000400090: d2800ba8 movz x8, #0x5d
r8 = 0x5d
0x0000000000400094: d2800000 movz x0, #0
r0 = 0
0x0000000000400098: d4000001 svc #0
Process exited normally.
