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

标签 c++ c

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

最佳答案

在 Linux 上,您可以通过 /proc/${pid}/maps 读取进程的内存,如 greatly explained here .

现在要找到特定变量的内存段在哪里是另一回事。

如果您编写程序,您可以将变量打包在一个“打包”结构中,在两个长字符数组之间,您在其中放置一些定义的字节,其序列不太可能自然出现在进程中(即不是 0,0 ,0 ... 但是一堆你知道并存储在其他地方的类似随机的字节)。此编译没有优化,-g 生成并保留符号表。

然后使用 read (2) 函数,您应该能够轻松找到第一个字符数组(第二个nd 显示变量结束的位置),并且然后访问变量。
但是如果你写了这个程序,你可能会在运行时使用 gdb 来分析它的数据..

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

但是,这是困难的部分,您如何找到 变量?

  • 如果正在运行的程序仍然有其符号表(未剥离),this answer (同上)有帮助
  • 如果正在运行的程序被剥离,就像大多数在 Linux 上运行的程序一样,那么……您可能会查看字符串、内存中的值并尝试通过二分法来捕获您的变量,但这并不容易.

关于c++ - 我们可以在不使用 c 程序和一些编码技术的情况下访问 c 中变量的内存位置及其在程序中的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240033/

相关文章:

c - C中的字符串值查找表?

c - 我需要帮助来理解指针的语法

c - 获取终端名称

c - 难以写入位图文件

清除一个小整数数组 : memset vs. for 循环

android - GLES 3.0 包括 gl2ext.h

c++ - 如何在不执行未定义行为的情况下获得浮点/双位?

C++ - 将数字添加到列表中? (像 python )

c++ - 如何使用 OpenGL 在 Windows 上的同一个应用程序中绘制两个单独的 3D 窗口?

c++ - 每次需要编译 C++ 程序时,是否都需要键入 -std=c++17(或我想使用的任何标准)?