用c#确定进程的内存对齐
本文关键字:内存 对齐 进程 | 更新日期: 2023-09-27 17:50:37
我正在编写一个c#应用程序,它接受一个字符串作为任何友好的进程名(比如'notepad')并读取进程内存。这是很好的读取字节,但我不知道如果这些是int32,字符,bool或其他类型的数据。解决这个问题的第一步是了解数据是如何填充的。如何确定内存的数据对齐?
我明白了这并不像知道操作系统或处理器那么简单。即使在那时,也可能有不同的包装:http://www.developerfusion.com/article/84519/mastering-structs-in-c/
那么,是否有一些pinvoke我可以在进程句柄上使用来读取一些值,或者可能是一个算法来读取一些字节并测试它找到的内容?
动机(如果有人对我的最终目标有更好的解决方案):我不想通过查看相对地址0,1,2,3来寻找潜在的int32值(或任何其他类型),然后再查看1,2,3,4等等,如果我能帮助它。如果内存是4字节对齐的,当我可以检查0、1、2、3并跳转到4、5、6、7时,我将白白浪费很多精力。
我不太确定您在尝试做什么-但我最好的打赌是您希望挖掘过程以找到错误或了解他们在做什么?
找出内存布局的最佳方法是通过符号(.pdb)。这是你自己写的应用吗?
假设没有,您可以考虑注入一个线程,然后调用MiniDumpWriteDump()。这个API可以将内存转储到磁盘,您可以使用windbg浏览它。
这里的想法是使用微软的公共符号(!symfix),然后在内存中寻找你需要的任何东西。有了microsoftbits的符号会对你有所帮助——有了这些符号,你就能找出线程/堆/句柄等的位置