gpt4 book ai didi

C 变量的地址范围

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

如何打印/查找所有类型变量(全局、局部、静态等)的地址范围。范围是否由任何标准定义,或者我可以使用工具或 bash 命令获取它们吗?感谢您的帮助:)

最佳答案

How can I print/find the address ranges for all kind of variables (global, local, static, etc).

局部变量通常存储在堆栈中——这意味着每次调用函数时它们都有不同的地址,并且在函数调用之间或寄存器中没有地址——这意味着它们根本没有地址。

全局变量和静态变量在链接器完成后基本上是一样的。它们可能有固定地址,或仅在运行时可用的某些段地址的固定偏移量,或直到运行时才指定的重定位表中的条目。在某些 Unix 平台上,对象指定默认基地址(或每段基地址)并且仅在它们与其他内容冲突时才重定位(这意味着可执行文件通常不会重定位,共享库可能会也可能不会);在其他平台上,无论如何都会重新定位所有内容(作为一项安全功能)。

此外,变量可能有也可能没有公共(public)符号,这取决于您编译和链接程序或共享对象的方式。如果是这样,您通常可以使用属于编译器工具链一部分的工具来查找地址/偏移量/重定位条目,例如 nmobjtool ;如果他们不这样做,就没有什么可查找的。

Are the ranges defined by any standard

不是任何 Unix(或 POSIX/SuS)标准。如果您询问更具体的平台,例如使用标准 ABI 在 x86_64 上使用 glibc2.3+ 的 linux,可能会有部分答案,但每个平台的答案都会不同。

or can I get them with a tool, or with a bash command

没有内置的 bash 命令,但是,如上所述,您的平台和编译器工具链的组合可能有一个工具可以为您提供一些您想要的信息。

关于C 变量的地址范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27002323/

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