楼主:
unixxxx (皓皓)
2015-01-23 17:11:35把 整数 5 存到 0x00123456这个内存位址 并用指标指向它
请问该怎么把值存到指定的内存位址里?!
int *a;
a=00123456;
*a=5;
原本是这样打 可是编译过不了 他不会把00123456当做内存位址
应该要怎么改?!
作者:
wenyonba (射后不理很XX啊!!!!)
2015-01-23 18:29:00一定不行啊,你怎么知道这位址是哪,有没有其他资源占用一定要由 OS 分配给你
作者: epithet (epithet) 2015-01-23 19:13:00
int *logicalAddr = reinterpret_cast<int *>(42798);
作者:
carylorrk (carylorrk)
2015-01-23 19:40:00只有我觉得是那个 0 开头的关系吗XDD
作者:
wenyonba (射后不理很XX啊!!!!)
2015-01-23 21:20:00直接 reinterpret_cast 过去会发生什么事 ?_?
作者: epithet (epithet) 2015-01-23 22:46:00
会把 42798 存进内存里面,一段该代表变量的位置里。
作者:
L4ys (Lays)
2015-01-24 00:05:00应该要写 a=0x00123456; 应该会直接segmentation fault啦这个内存位置通常不可写
给你个提示,在保护模式下,所有程式拿到的内存都是相对位置,只有kernel space(linux)跟Ring1以下(Win)才有机会得到绝对位置
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2015-01-24 04:08:00单芯片之类的也是有可能会这样写啦
作者:
karose (karose)
2015-01-24 09:14:00位址要转指标便可
作者:
carylorrk (carylorrk)
2015-01-24 17:06:00他也没有讲是不是有 MMU,应该可以默认不用理吧。除非是在写 kernel,才会有转换的问题。
其实早期的确能透过dll共用内存位置不过那已经是很早期的windows API行为就是 :P当年不少IPC都是用这种偷吃步的方法实现的
*(int *)ADDRESS = VALUE;不知道上面为什么扯到好远的地方去...是L4ys大大耶XDDD 先膜拜 原PO只有漏了"0x" 其他没错
作者: jaw109 2015-01-25 14:33:00
除非这位址是os配给你的,否则一定会segmentation fault
作者: tubbysong (song) 2015-01-25 17:41:00
Int *p; p=(int)0x1234 or *p=(int)0x1234
楼上你两个式子是不同意义喔楼主只是举个例子,没有考虑范围,所以纯就问题解答