我们可以在不使用 c 程序和一些编码技术的情况下访问 c 中变量的内存位置以及它在程序中的值吗?

Can we access memory location of variable in c as well as it's value in program with out using c program and some coding technique?

本文关键字:程序 内存 变量 位置 访问 编码 技术 我们 情况下      更新时间:2023-10-16

我正在学习C语言中的指针。使用指针,我可以检索程序中定义的变量的内存位置。由于它位于内存中,我们可以使用其他编码技术访问它的位置以及c prgram范围之外的值。

在Linux上,您可以通过/proc/${pid}/maps对进程的内存进行读取访问,这里对此进行了详细解释。

现在,要找到一个特定变量的内存段在哪里,那就另当别论了。

如果你编写了这个程序,你可以将变量打包成一个"打包"结构,在两个长字符数组之间,你可以在其中放置一些定义的字节,这些字节的序列不太可能在一个过程中自然出现(即不是0,0,0……而是一堆你知道并存储在其他地方的随机字节)。此编译无需优化,-g生成并保存符号表。

然后使用read (2)函数,您应该能够很容易地找到第一个char数组(2nd数组显示变量的结束位置),然后访问变量
但是,如果您编写了该程序,您很可能会在运行时使用gdb来分析其数据。。

如果你没有写这个程序,这可能是你更感兴趣的,你仍然可以

  • 使用工具查看进程内存,访问/proc/${pid}/maps
  • 生成进程的核心转储(使进程崩溃并将其核心内存存储在磁盘上)

但是,这是困难的部分,如何定位变量?

  • 如果正在运行的程序仍然有它的符号表(没有剥离),这个答案(类似于上面的)是有帮助的
  • 如果正在运行的程序被剥离,就像Linux上运行的大多数程序一样,那么。。。您可以查看字符串,内存中的值,并尝试通过二分法来捕获变量,但这并不容易