我想知道linux内存对齐和布局
下面代码示例中的两个奇怪的外观没有意义我想知道linux内存对齐和布局,linux,memory,fedora,Linux,Memory,Fedora,下面代码示例中的两个奇怪的外观没有意义 为什么foo和argv[0]之间的距离总是不同的 为什么不与4对齐?虽然预期结果是4的倍数,但并非如此 我想知道这些奇怪的表情的详细原因 我知道这和我的工作无关 [root@localhost~]#cat/etc/fedora发布 软呢帽第14版(劳克林) [root@localhost~]#cat poc.c #包括 int main(int argc,char*argv[]){ int foo; printf(“%d\n”,(int)argv[0]-(
foo
和argv[0]
之间的距离总是不同的[root@localhost~]#cat/etc/fedora发布
软呢帽第14版(劳克林)
[root@localhost~]#cat poc.c
#包括
int main(int argc,char*argv[]){
int foo;
printf(“%d\n”,(int)argv[0]-(int)&foo);
}
[root@localhost~]#/poc
5345
[root@localhost~]#/poc
8465
[root@localhost~]#/poc
4641
[root@localhost~]#/poc
1201
[root@localhost~]#/poc
2881
[root@localhost~]#/poc
7073
[root@localhost~]#/poc
5905
[root@localhost~]#/poc
2225
[root@localhost~]#/poc
2465
[root@localhost~]#/poc
6017
[root@localhost~]#/poc
8657
[root@localhost~]#/poc
8401
[root@localhost~]#/poc
5073
[root@localhost~]#/poc
5505
[root@localhost~]#/poc
1761
[root@localhost~]#/poc
8609
[root@localhost~]#/poc
3665
[root@localhost~]#/poc
3633
[root@localhost~]#/poc
6257
[root@localhost~]#/poc
3441
[root@localhost~]#/poc
4961
[root@localhost~]#/poc
5233
[root@localhost~]#/poc
561
[root@localhost~]#/poc
3441
[root@localhost~]#/poc
2097
[root@localhost~]#/poc
1729
[root@localhost~]#/poc
1841
[root@localhost~]#/poc
2241
[root@localhost~]#/poc
2145
[root@localhost~]#/poc
6593
[root@localhost~]#/poc
5681
[root@localhost~]#/poc
737
[root@localhost~]#/poc
8353
[root@localhost~]#/poc
1937
[root@localhost~]#/poc
3937
[root@localhost~]#/poc
4769
[root@localhost~]#/poc
3441
[root@localhost~]#/poc
6097
[root@localhost~]#/poc
6673
[root@localhost~]#/poc
1857
[root@localhost~]#/poc
5617
[root@localhost~]#/poc
5473
[root@localhost~]#/poc
7313
[root@localhost~]#/poc
3921
[root@localhost~]#/poc
2369
[root@localhost~]#/poc
4609
[root@localhost~]#/poc
5569
[root@localhost~]#/poc
6209
[root@localhost~]#/poc
3457
[root@localhost~]#/poc
3665
[root@localhost~]#/poc
3297
[root@localhost~]#/poc
4465
[root@localhost~]#/poc
5281
[root@localhost~]#/poc
6017
[root@localhost~]#/poc
2705
[root@localhost~]#/poc
1601
[root@localhost~]#/poc
7457
[root@localhost~]#/poc
4145
[root@localhost~]#/poc
2353
[root@localhost~]#/poc
5537
[root@localhost~]#/poc
7873
[root@localhost~]#/poc
6449
[root@localhost~]#/poc
3297
1。为什么foo和argv[0]之间的距离总是不同?
因为ASLR
我知道这与ASLR无关
你确定吗?内核的虚拟地址空间随机化参数值是多少?应该是0
2。为什么不与4对齐?虽然预期结果是4的倍数,但并不
你想用它来演示什么?代码计算从argv中的第一个字符串到局部变量foo的距离。这有什么意义
处理参数和局部变量的方式和位置实际上取决于操作系统和编译器。请看下面的帖子:
[root@localhost ~]# cat /etc/fedora-release
Fedora release 14 (Laughlin)
[root@localhost ~]# cat poc.c
#include <stdio.h>
int main(int argc, char *argv[]){
int foo;
printf("%d\n", (int)argv[0] - (int)&foo);
}
[root@localhost ~]# ./poc
5345
[root@localhost ~]# ./poc
8465
[root@localhost ~]# ./poc
4641
[root@localhost ~]# ./poc
1201
[root@localhost ~]# ./poc
2881
[root@localhost ~]# ./poc
7073
[root@localhost ~]# ./poc
5905
[root@localhost ~]# ./poc
2225
[root@localhost ~]# ./poc
2465
[root@localhost ~]# ./poc
6017
[root@localhost ~]# ./poc
8657
[root@localhost ~]# ./poc
8401
[root@localhost ~]# ./poc
5073
[root@localhost ~]# ./poc
5505
[root@localhost ~]# ./poc
1761
[root@localhost ~]# ./poc
8609
[root@localhost ~]# ./poc
3665
[root@localhost ~]# ./poc
3633
[root@localhost ~]# ./poc
6257
[root@localhost ~]# ./poc
3441
[root@localhost ~]# ./poc
4961
[root@localhost ~]# ./poc
5233
[root@localhost ~]# ./poc
561
[root@localhost ~]# ./poc
3441
[root@localhost ~]# ./poc
2097
[root@localhost ~]# ./poc
1729
[root@localhost ~]# ./poc
1841
[root@localhost ~]# ./poc
2241
[root@localhost ~]# ./poc
2145
[root@localhost ~]# ./poc
6593
[root@localhost ~]# ./poc
5681
[root@localhost ~]# ./poc
737
[root@localhost ~]# ./poc
8353
[root@localhost ~]# ./poc
1937
[root@localhost ~]# ./poc
3937
[root@localhost ~]# ./poc
4769
[root@localhost ~]# ./poc
3441
[root@localhost ~]# ./poc
6097
[root@localhost ~]# ./poc
6673
[root@localhost ~]# ./poc
1857
[root@localhost ~]# ./poc
5617
[root@localhost ~]# ./poc
5473
[root@localhost ~]# ./poc
7313
[root@localhost ~]# ./poc
3921
[root@localhost ~]# ./poc
2369
[root@localhost ~]# ./poc
4609
[root@localhost ~]# ./poc
5569
[root@localhost ~]# ./poc
6209
[root@localhost ~]# ./poc
3457
[root@localhost ~]# ./poc
3665
[root@localhost ~]# ./poc
3297
[root@localhost ~]# ./poc
4465
[root@localhost ~]# ./poc
5281
[root@localhost ~]# ./poc
6017
[root@localhost ~]# ./poc
2705
[root@localhost ~]# ./poc
1601
[root@localhost ~]# ./poc
7457
[root@localhost ~]# ./poc
4145
[root@localhost ~]# ./poc
2353
[root@localhost ~]# ./poc
5537
[root@localhost ~]# ./poc
7873
[root@localhost ~]# ./poc
6449
[root@localhost ~]# ./poc
3297