我们可以在不使用 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?
我正在学习C语言中的指针。使用指针,我可以检索程序中定义的变量的内存位置。由于它位于内存中,我们可以使用其他编码技术访问它的位置以及c prgram范围之外的值。
在Linux上,您可以通过/proc/${pid}/maps
对进程的内存进行读取访问,这里对此进行了详细解释。
现在,要找到一个特定变量的内存段在哪里,那就另当别论了。
如果你编写了这个程序,你可以将变量打包成一个"打包"结构,在两个长字符数组之间,你可以在其中放置一些定义的字节,这些字节的序列不太可能在一个过程中自然出现(即不是0,0,0……而是一堆你知道并存储在其他地方的随机字节)。此编译无需优化,-g
生成并保存符号表。
然后使用read (2)
函数,您应该能够很容易地找到第一个char数组(2nd数组显示变量的结束位置),然后访问变量
但是,如果您编写了该程序,您很可能会在运行时使用gdb来分析其数据。。
如果你没有写这个程序,这可能是你更感兴趣的,你仍然可以
- 使用工具查看进程内存,访问
/proc/${pid}/maps
- 生成进程的核心转储(使进程崩溃并将其核心内存存储在磁盘上)
但是,这是困难的部分,如何定位变量?
- 如果正在运行的程序仍然有它的符号表(没有剥离),这个答案(类似于上面的)是有帮助的
- 如果正在运行的程序被剥离,就像Linux上运行的大多数程序一样,那么。。。您可以查看字符串,内存中的值,并尝试通过二分法来捕获变量,但这并不容易
相关文章:
- 应用程序内存使用量减少
- 我们如何在ESP8266上减小程序内存上的代码大小
- 正在从程序内存中分解x指令
- mysqlcppconnen程序内存泄漏
- 这些结构在文件中的大小不同,但在程序内存中的大小相同
- 32 位应用程序内存不足
- C++空程序内存泄漏
- 设备驱动程序内存缓冲区处理器缓存问题
- C 程序内存冲突依赖于 std::cout (?)
- 空的Win32 C++应用程序内存消耗过多
- 在十六进制编辑器中写入程序内存,并以编程方式读取
- 为什么我的程序内存不释放?
- 简单的进程加载程序内存映射
- 虚拟大小导致程序内存不足
- 可视化C++程序内存计算
- 我的C++程序内存泄漏
- 图形驱动程序会导致我的应用程序内存泄漏吗
- 我的应用程序内存增加
- 调用JNI_CreateJavaVM函数后,应用程序内存增加了千兆字节
- 我的简单数独程序内存映射错误