Пытаясь понять структуру памяти в процессе и изучить ассемблер, я написал базовую программу на C на Pi3 (ARM) и разобрал ее с помощью GDB, но, поскольку я новичок в этом, мне нужна помощь в ее понимании.
По сути, я пытаюсь понять и определить в сборке, где хранятся переменные (сегменты памяти BSS, DATA, TEXT), а также понять и следовать кадрам стека.
Я только отображал основную функцию - на экране отладки были другие сегменты, поэтому дайте мне знать, если они тоже помогут!
Я понимаю, что в основном делают отдельные инструкции, но я хотел бы знать:
Первые 3 строки касаются указателя стека, это настройка фрейма стека для основной функции?
В x0x10414 он использует значение для возраста, это где локальная переменная помещается в стек как часть кадра для основной функции?
В x0x1041c это возвращаемое значение, как я и предполагал, тоже было помещено в стек как часть кадра?
Где стек сбрасывается в конце функции?
int main () {
int age = 30;
int salary;
return 0;
}
0x10408 <main> push {r11} ; (str r11, [sp, #-4]!)
x0x1040c <main+4> add r11, sp, #0
x0x10410 <main+8> sub sp, sp, #12
x0x10414 <main+12> mov r3, #30
x0x10418 <main+16> str r3, [r11, #-8]
x0x1041c <main+20> mov r3, #0
x0x10420 <main+24> mov r0, r3
x0x10424 <main+28> add sp, r11, #0
x0x10428 <main+32> pop {r11} ; (ldr r11, [sp], #4)
x0x1042c <main+36> bx lr