请教大神,winform程序能否直接对内存地址进行读写

超级大咸鱼 2012-10-15 10:16:16
比如把一个内存地址中的值读取出来然后直接修改掉。
完全没思路,不知是winform不好操作内存还是这领域我还尚未涉及....
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大咸鱼 2012-10-15
  • 打赏
  • 举报
回复
试 了下 已经可以了 并不是有项目需要改内存,只是个人好奇,多谢各位大神的关注。结贴了
threenewbee 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

地址一般是32位的。16位的一般是offset,得通过base address计算出实际地址。
[/Quote]
哦,看错了,你说的是16进制。

16进制和10进制只是人阅读时候的两种方式。

C#约定,前面加0x的就是16进制。因此 int i = 0xA; int i = 0x000A; 和 int i = 10; 都是一样的。
__天涯寻梦 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
你只要能找到那地址就可以

C# code
unsafe
{
int* p = (int*)地址;
*p = 1;
}

这个地址是如何赋值的呢
地址是16进制的, 需要把16进制转int,然后再转int*?
[/Quote]
进制只是一种显示方式,本质还是数值,只要地址找对,直接就可以转换为合适类型的指针并操作。
比如 32 位下 16 进制的地址 int* p = (int*)0x11111111;
Dobzhansky 2012-10-15
  • 打赏
  • 举报
回复
System . Runtime . InteropServices . Marshal 就是为所欲为
threenewbee 2012-10-15
  • 打赏
  • 举报
回复
地址一般是32位的。16位的一般是offset,得通过base address计算出实际地址。
超级大咸鱼 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你只要能找到那地址就可以

C# code
unsafe
{
int* p = (int*)地址;
*p = 1;
}
[/Quote]
这个地址是如何赋值的呢
地址是16进制的, 需要把16进制转int,然后再转int*?
__天涯寻梦 2012-10-15
  • 打赏
  • 举报
回复
你只要能找到那地址就可以
unsafe
{
int* p = (int*)地址;
*p = 1;
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧