vak: (Default)
[personal profile] vak
Однако сурово я обломался с трассировкой на архитектуре arm32! Как выяснилось, линуксное ядро не поддерживает пошаговое выполнение для 32-битных ARM-ов. На arm64 отлично идёт, а на той же Olinuxino - фиг вам. Вызов ptrace(PTRACE_SINGLESTEP) возвращает EIO. И по той же причине не будет работать на mips или на riscv. Пичалька.

Я и начинал-то с единственной целью: выяснить механизм вызова функций из разделяемых библиотек на 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.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org