程序
#include <stdio.h>
//int g1 = 0, g2 = 0, g3 = 0;
void func(int p1, int p2, int p3)
{
int v1 = p1, v2 = p2, v3 = p3;
printf("局部变量地址:\n");
printf("v1:%lu\n", (unsigned long)&v1);
printf("v2:%lu\n", (unsigned long)&v2);
printf("v3:%lu\n",(unsigned long) &v3);
printf("\n");
printf("参数地址:\n");
printf("p1:%lu\n", (unsigned long)&p1);
printf("p2:%lu\n", (unsigned long)&p2);
printf("p3:%lu\n", (unsigned long)&p3);
printf("\n");
}
int main(int argc, char const *argv[])
{
int x = 0;
int y = 1;
int z = 2;
printf("main函数中局部变量地址:\n");
printf("x:%lu\n", (unsigned long)&x);
printf("y:%lu\n", (unsigned long)&y);
printf("z:%lu\n", (unsigned long)&z);
func(1,2,3);
return 0;
}
arm体系
arm输出
输入如下命令:
arm-linux-gcc hello.c -o hello -fomit-frame-pointer -O0
arm-linux-objdump -d hello > hello.txt
mini210开发板(Linux)输出:
main函数中局部变量地址: //栈,占4个字节,高地址到低地址
x:3198381100
y:3198381096
z:3198381092
局部变量地址: //栈,占4个字节,高地址到低地址
v1:3198381068
v2:3198381064
v3:3198381060
//间隔8个字节
参数地址: //栈,占4个字节,高地址到低地址
p1:3198381052
p2:3198381048
p3:3198381044
反汇编
00008454 <func>:
8454: e52de004 push {lr} ; (str lr, [sp, #-4]!)
8458: e24dd024 sub sp, sp, #36 ; 0x24
845c: e58d000c str r0, [