gpt4 book ai didi

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

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

我正在学习 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/

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