gpt4 book ai didi

linux - 我想知道linux内存对齐和布局

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:35 25 4
gpt4 key购买 nike

下面的代码示例中的两个奇怪的外观没有意义。

  1. 为什么 fooargv[0] 之间的距离总是不同?
  2. 为什么不与 4 对齐?虽然预期结果是 4 的倍数,但并非

我想知道这些奇怪表情的详细原因。

我知道它与 ASLR 无关

[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

最佳答案

<强>1。为什么 foo 和 argv[0] 之间的距离总是不同?

因为 ASLR。

and i know it is not relate with ASLR

你确定吗?您的内核的虚拟地址空间随机化参数值(randomize_va_space)是多少?应该是0。

<强>2。为什么不对齐到4?虽然预期结果是4的倍数,但并不是

你想用它来展示什么?您的代码计算从 argv 中的第一个字符串到局部变量 foo 的距离。这有什么意义?

参数和局部变量的处理方式和位置实际上取决于操作系统和编译器。看看下面的帖子:Where are C/C++ main functions parameters

关于linux - 我想知道linux内存对齐和布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com